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
this section).
The class constructor optionally accepts a URL as its first parameter
(can be either a string or a Zend_Uri_Http
object), and an array
or Zend_Config
object containing configuration options. Both can
be left out, and set later using the setUri() and setConfig() methods.
Ejemplo 449. Instantiating a Zend_Http_Client Object
$client = new Zend_Http_Client('http://example.org', array( 'maxredirects' => 0, 'timeout' => 30)); // This is actually exactly the same: $client = new Zend_Http_Client(); $client->setUri('http://example.org'); $client->setConfig(array( 'maxredirects' => 0, 'timeout' => 30)); // You can also use a Zend_Config object to set the client's configuration $config = new Zend_Config_Ini('httpclient.ini', 'secure'); $client->setConfig($config);
Nota
Zend_Http_Client
uses
Zend_Uri_Http
to validate URLs. This means
that some special characters like the pipe symbol ('|') or the
caret symbol ('^') will not be accepted in the URL by default.
This can be modified by setting the 'allow_unwise' option of
Zend_Uri
to 'TRUE
'. See this section for more
information.
The constructor and setConfig() method accept an associative array
of configuration parameters, or a Zend_Config
object. Setting
these parameters is optional, as they all have default values.
Tabla 75. Zend_Http_Client configuration parameters
Parameter | Description | Expected Values | Default Value |
---|---|---|---|
maxredirects | Maximum number of redirections to follow (0 = none) | integer | 5 |
strict |
Whether perform validation on header names. When set to
FALSE , validation functions will be skipped.
Usually this should not be changed
|
boolean | TRUE |
strictredirects | Whether to strictly follow the RFC when redirecting (see this section) | boolean | FALSE |
useragent | User agent identifier string (sent in request headers) | string | 'Zend_Http_Client' |
timeout | Connection timeout (seconds) | integer | 10 |
httpversion | HTTP protocol version (usually '1.1' or '1.0') | string | '1.1' |
adapter | Connection adapter class to use (see this section) | mixed | 'Zend_Http_Client_Adapter_Socket' |
keepalive | Whether to enable keep-alive connections with the server. Useful and might improve performance if several consecutive requests to the same server are performed. | boolean | FALSE |
storeresponse |
Whether to store last response for later retrieval with
getLastResponse() . If set to
FALSE
getLastResponse() will return
NULL .
|
boolean | TRUE |
encodecookies | Whether to pass the cookie value through urlencode/urldecode. Enabling this breaks support with some web servers. Disabling this limits the range of values the cookies can contain. | boolean | TRUE |
Performing simple HTTP requests is very easily done using the request() method, and rarely needs more than three lines of code:
Ejemplo 450. Performing a Simple GET Request
$client = new Zend_Http_Client('http://example.org'); $response = $client->request();
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
[6].
For convenience, these are all defined as class constants:
Zend_Http_Client::GET, Zend_Http_Client::POST and so on.
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).
Ejemplo 451. Using Request Methods Other Than GET
// Preforming a POST request $response = $client->request('POST'); // Yet another way of preforming a POST request $client->setMethod(Zend_Http_Client::POST); $response = $client->request();
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 its first parameter,
and the GET
parameter's value as its 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.
Ejemplo 452. Setting GET Parameters
// Setting a get parameter using the setParameterGet method $client->setParameterGet('knight', 'lancelot'); // This is equivalent to setting such URL: $client->setUri('http://example.com/index.php?knight=lancelot'); // Adding several parameters with one call $client->setParameterGet(array( 'first_name' => 'Bender', 'middle_name' => 'Bending' 'made_in' => 'Mexico', ));
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.
Ejemplo 453. Setting POST Parameters
// Setting a POST parameter $client->setParameterPost('language', 'fr'); // Setting several POST parameters, one of them with several values $client->setParameterPost(array( 'language' => 'es', 'country' => 'ar', 'selection' => array(45, 32, 80) ));
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.
Zend_Http_Client
provides methods of accessing the last request
sent and last response received by the client object.
Zend_Http_Client->getLastRequest()
takes no parameters
and returns the last HTTP request sent by the client as a string.
Similarly, Zend_Http_Client->getLastResponse()
returns
the last HTTP response received by the client as a
Zend_Http_Response object.