<sect1 id="zend.http.client">
    <title>Zend_Http_Client - Введение</title>

    <sect2 id="zend.http.client.introduction">
        <title>Введение</title>
        <para>
            Zend_Http_Client предоставляет простой интерфейс для выполнения
            HTTP-запросов. Zend_Http_Client поддерживает как большинство простых
            возможностей, ожидаемых от любого HTTP-клиента, так и более сложные
            функции, такие, как HTTP-аутентификация и выгрузка файлов. При
            успешно выполненных запросах (и большинстве неуспешно выполненных)
            возвращается объект Zend_Http_Response, который предоставляет доступ
            к заголовкам и телу ответа (см. <xref linkend="zend.http.response" />).
<!--
            Zend_Http_Client provides an easy interface for preforming Hyper-Text
            Transfer Protocol (HTTP) requests. Zend_Http_Client supports most simple
            features expected from an HTTP client, as well as some more complex
            features such as HTTP authentication and file uploads. Successful
            requests (and most unsuccessful ones too) return a Zend_Http_Response
            object, which provides access to the response's headers and body (see
            <xref linkend="zend.http.response" />).
-->
        </para>
        <para>
            Конструктор класса опционально принимает URL (может быть строкой или
            объектом Zend_Uri_Http) и массив конфирурационных параметров. Оба
            параметра могут быть опущены и установлены позднее через методы
            <code>setUri()</code> и <code>setConfig()</code>.
<!--
            The class constructor optionally accepts a URL as it's first parameter
            (can be either a string or a Zend_Uri_Http object), and an optional
            array of configuration parameters. Both can be left out,
            and set later using the setUri() and setConfig() methods.
-->
            <example>
                <title>Инстанцирование объекта Zend_Http_Client<!--Instantiating a Zend_Http_Client object--></title>
                <programlisting language="php">
<![CDATA[<?php
    require_once 'Zend/Http/Client.php';

    $client = new Zend_Http_Client('http://example.org', array(
        'maxredirects' => 0,
        'timeout'      => 30));

    // Этот код делает то же самое:
    $client = new Zend_Http_Client();
    $client->setUri('http://example.org');
    $client->setConfig(array(
        'maxredirects' => 0,
        'timeout'      => 30));

?>]]></programlisting>
            </example>
        </para>
    </sect2>
    <sect2 id="zend.http.client.configuration">
        <title>Параметры конфигурации<!--Configuration Parameters--></title>
        <para>
            Конструктор и метод <code>setConfig()</code> принимают ассоциативный
            массив параметров конфигурации. Установка этих параметров является
            опциональной, поскольку все они имеют значения по умолчанию.
<!--
            The constructor and setConfig() method accept an associative array
            of configuration parameters. Setting these parameters is optional,
            as they all have default values.
-->
            <table>
                <title>Параметры конфигурации Zend_Http_Client<!--Zend_Http_Client configuration parameters--></title>
                <tgroup cols="4">
                    <thead>
                        <row>
                            <entry>Параметр</entry>
                            <entry>Описание</entry>
                            <entry>Тип</entry>
                            <entry>Значение по умолчанию</entry>
                        </row>
                    </thead>
                    <tbody>
                        <row>
                            <entry>maxredirects</entry>
                            <entry>
                                Максимальное количество последующих
                                перенаправлений (0 = ни одного перенаправления)
<!--
                                Maximum number of redirections to follow (0 = none)
-->
                            </entry>
                            <entry>integer</entry>
                            <entry>5</entry>
                        </row>
                        <row>
                            <entry>strictredirects</entry>
                            <entry>
                                Строгое следование спецификации RFC при
                                перенаправлениях (см. <xref linkend="zend.http.client.redirections" />)
<!--
                                Whether to strictly follow the RFC when redirecting (see <xref linkend="zend.http.client.redirections" />)
-->
                            </entry>
                            <entry>boolean</entry>
                            <entry>false</entry>
                        </row>
                        <row>
                            <entry>useragent</entry>
                            <entry>
                                Идентификатор агента пользователя (отправляется
                                в заголовке запроса)
<!--
                                User agent identifier string (sent in request headers)
-->
                            </entry>
                            <entry>string</entry>
                            <entry>'Zend_Http_Client'</entry>
                        </row>
                        <row>
                            <entry>timeout</entry>
                            <entry>
                                Таймаут соединения в секундах
<!--
                                Connection timeout (seconds)
-->
                            </entry>
                            <entry>integer</entry>
                            <entry>10</entry>
                        </row>
                        <row>
                            <entry>httpversion</entry>
                            <entry>
                                Версия протокола HTTP
<!--
                                HTTP protocol version
-->
                            </entry>
                            <entry>float (1.1 or 1.0)</entry>
                            <entry>1.1</entry>
                        </row>
                        <row>
                            <entry>adapter</entry>
                            <entry>
                                Используемый класс адаптера соединения
                                (см. <xref linkend="zend.http.client.adapters" />)
<!--
                                Connection adapter class to use (see <xref linkend="zend.http.client.adapters" />)
-->
                            </entry>
                            <entry>mixed</entry>
                            <entry>'Zend_Http_Client_Adapter_Socket'</entry>
                        </row>
                        <row>
                            <entry>keepalive</entry>
                            <entry>
                                Включение поддержки соединения keep-alive с
                                сервером. Может быть полезно и повышает
                                поизводительность, если выполняется несколько
                                последовательных запросов к одному и тому же
                                серверу.
<!--
                                Whether to enable keep-alive connections with the server. Useful and might improve performance if several consecutive requests to the same server are performned.
-->
                            </entry>
                            <entry>boolean</entry>
                            <entry>false</entry>
                        </row>
                    </tbody>
                </tgroup>
            </table>
        </para>
    </sect2>
    <sect2 id="zend.http.client.basic-requests">
        <title>Выполнение базовых HTTP-запросов<!--Performing Basic HTTP Requests--></title>
        <para>
            Выполнение простых HTTP-запросов с использованием метода
            <code>request()</code> довольно простое, и редко требуется больше
            кода, чем в эти три строчки:
<!--

            Performing simple HTTP requests is very easily done using the
            request() method, and rarely needs more than three lines of code:
-->
            <example>
                <title>Выполнение простого запроса GET<!--Preforming a Simple GET Request--></title>
                <programlisting language="php">
<![CDATA[<?php
    require_once 'Zend/Http/Client.php';

    $client = new Zend_Http_Client('http://example.org');
    $response = $client->request();
?>]]></programlisting>
            </example>
            Метод <code>request()</code> принимает один необязательный параметр
            - метод запроса. Это могут быть методы GET, POST, PUT, HEAD, DELETE,
            TRACE, OPTIONS или CONNECT, определенные в протоколе HTTP.
<!--
            The request() method takes one optional parameter - the request method.
            This can be either GET, POST, PUT, HEAD, DELETE, TRACE, OPTIONS or
            CONNECT as defined by the HTTP protocol
-->
            <footnote>
              <para>
                См. RFC 2616 - <ulink url="http://www.w3.org/Protocols/rfc2616/rfc2616.html" />.
              </para>
            </footnote>.
            Для удобства все они определены как константы класса:
            Zend_Http_Request::GET, Zend_Http_Request::POST и т.д.
<!--
            For convenience, these are all defined as class constants:
            Zend_Http_Request::GET, Zend_Http_Request::POST and so on.
-->
        </para>
        <para>
            Если метод запроса не был указан, то используемый метод определяется
            последним вызовом <code>setMethod()</code>. Если
            <code>setMethod()</code> не был вызван, то по умолчанию используется
            метод GET (см. пример выше).
<!--
            If no method is specified, the method set by the last setMethod()
            call is used. If setMethod() was never called, the default request
            method is GET (see the above example).
-->
            <example>
                <title>Использование методов запроса, отличных от GET<!--Using Request Methods Other Than GET--></title>
                <programlisting language="php">
<![CDATA[<?php
    // Выполнение запроса POST
    $response = $client->request('POST');

    // Еще один способ сделать то же самое:
    $client->setMethod(Zend_Http_Client::POST);
    $response = $client->request();
?>]]></programlisting>
            </example>
        </para>
    </sect2>

    <sect2 id="zend.http.client.parameters">
        <title>Добавление параметров GET и POST<!--Adding GET and POST parameters--></title>
        <para>
            Добавление параметров GET в HTTP-запрос довольно простое, это может
            быть сделано посредством определения параметров как часть URL или с
            использованием метода <code>setParameterGet()</code>. Этот метод
            принимает имя параметра GET и его значение первый и второй аргументы
            соответственно. Метод <code>setParameterGet()</code>
            может также принимать ассоциативный массив пар имя => значение, что
            удобно, если нужно установить несколько параметров GET.
<!--
            Adding GET parameters to an HTTP request is quite simple, and can
            be done either by specifying them as part of the URL, or by using
            the setParameterGet() method.
            This method takes the GET parameter's name as it's first parameter,
            and the GET parameter's value as it's second parameter.
            For convenience, the setParameterGet() method can also accept a
            single associative array of name => value GET variables - which may
            be more comfortable when several GET parameters need to be set.
-->
            <example>
                <title>Установка параметров GET<!--Setting GET Parameters--></title>
                <programlisting language="php">
<![CDATA[<?php
    // Установка параметра GET с использованием метода setParameterGet
    $client->setParameterGet('knight', 'lancelot');

    // Эвивалентный код с установкой через URL:
    $client->setUri('http://example.com/index.php?knight=lancelot');

    // Добавление нескольких параметров в одном вызове
    $client->setParameterGet(array(
        'first_name'  => 'Bender',
        'middle_name' => 'Bending'
        'made_in'     => 'Mexico',
    ));
?>]]></programlisting>
            </example>
        </para>
        <para>
            В то время как параметры GET могут отправляться с любыми методами
            запроса, параметры POST могут отправляться только в теле запроса
            POST. Добавление параметров POST к запросу очень похоже на
            добавление параметров GET и выполняется через метод
            <code>setParameterPost()</code>.
<!--
            While GET parameters can be sent with every request method, POST
            parameters are only sent in the body of POST requests. Adding POST
            parameters to a request is very similar to adding GET parameters,
            and can be done with the setParameterPost() method, which is
            similar to the setParameterGet() method in structure.
-->
            <example>
                <title>Установка параметров POST<!--Setting POST Parameters--></title>
                <programlisting language="php">
<![CDATA[<?php
    // Установка параметра POST
    $client->setParameterPost('language', 'fr');

    // Установка нескольких параметров POST,
    // один из них - с несколькими значениями
    $client->setParameterPost(array(
        'language'  => 'es',
        'country'   => 'ar',
        'selection' => array(45, 32, 80)
    ));
?>]]></programlisting>
            </example>

            Заметьте, что отправляя запрос POST, вы можете установить как
            параметры POST, так и параметры GET. С другой стороны, хотя
            установка параметров POST для не-POST запросов не вызывает ошибки,
            она не имеет практического смысла. Если запрос не производится по
            методу POST, то параметры POST просто игнорируются.
<!--
            Note that when sending POST requests, you can set both GET and
            POST parameters. On the other hand, while setting POST parameters
            for a non-POST request will not trigger and error, it is useless.
            Unless the request is a POST request, POST parameters are simply
            ignored.
-->
        </para>
    </sect2>

    <sect2 id="zend.http.client.accessing_last">
        <title>Получение последних запроса и ответа<!--Accessing Last Request and Response--></title>
        <para>
            Zend_Http_Client предоставляет методы для получения последнего
            отправленного запроса и последнего ответа, полученного через
            объект клиента. Метод
            <code>Zend_Http_Client->getLastRequest()</code> не требует
            параметров и возвращает последний HTTP-запрос, отправленный
            через объект клиента, в виде строки. Аналогично,
            <code>Zend_Http_Client->getLastResponse()</code> возвращает
            последний HTTP-ответ, полученный через объект клиента, в виде
            объекта <link linkend="zend.http.response">Zend_Http_Response</link>.
<!--
            Zend_Http_Client provides methods of accessing the last request
            sent and last response received by the client object.
            <code>Zend_Http_Client->getLastRequest()</code> takes no parameters
            and returns the last HTTP request sent by the client as a string.
            Similarly, <code>Zend_Http_Client->getLastResponse()</code> returns
            the last HTTP response received by the client as a
            <link linkend="zend.http.response">Zend_Http_Response</link> object.
-->
        </para>
    </sect2>

</sect1>

<!--
vim:se ts=4 sw=4 et:
-->
