2014-02-12 20:07:05 -08:00
|
|
|
=======
|
|
|
|
Clients
|
|
|
|
=======
|
2014-02-13 23:37:34 -08:00
|
|
|
|
|
|
|
Clients are used to create requests, create transactions, send requests
|
|
|
|
through an HTTP adapter, and return a response. You can add default request
|
|
|
|
options to a client that are applied to every request (e.g., default headers,
|
|
|
|
default query string parameters, etc), and you can add event listeners and
|
|
|
|
subscribers to every request created by a client.
|
|
|
|
|
|
|
|
Creating a client
|
|
|
|
=================
|
|
|
|
|
|
|
|
The constructor of a client accepts an associative array of configuration
|
|
|
|
options.
|
|
|
|
|
2014-02-15 23:40:24 -08:00
|
|
|
base_url
|
|
|
|
Configures a base URL for the client so that requests created
|
|
|
|
using a relative URL are combined with the ``base_url`` of the client
|
|
|
|
according to section `5.2 of RFC 3986 <http://tools.ietf.org/html/rfc3986#section-5.2>`_.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// Create a client with a base URL
|
|
|
|
$client = new GuzzleHttp\Client(['base_url' => 'https://github.com']);
|
|
|
|
// Send a request to https://github.com/notifications
|
|
|
|
$response = $client->get('/notifications');
|
|
|
|
|
|
|
|
`Absolute URLs <http://tools.ietf.org/html/rfc3986#section-4.3>`_ sent
|
|
|
|
through a client will not use the base URL of the client.
|
|
|
|
|
|
|
|
adapter
|
|
|
|
Configures the HTTP adapter (``GuzzleHttp\Adapter\AdapterInterface``) used
|
|
|
|
to transfer the HTTP requests of a client. Guzzle will, by default, utilize
|
|
|
|
a stacked adapter that chooses the best adapter to use based on the provided
|
|
|
|
request options and based on the extensions available in the environment. If
|
|
|
|
cURL is installed, it will be used as the default adapter. However, if a
|
|
|
|
request has the ``stream`` request option, the PHP stream wrapper adapter
|
|
|
|
will be used (assuming ``allow_url_fopen`` is enabled in your PHP
|
|
|
|
environment).
|
|
|
|
|
|
|
|
parallel_adapter
|
|
|
|
Just like the ``adapter`` option, you can choose to specify an adapter
|
|
|
|
that is used to send requests in parallel
|
|
|
|
(``GuzzleHttp\Adapter\ParallelAdapterInterface``). Guzzle will by default
|
|
|
|
use cURL to send requests in parallel, but if cURL is not available it will
|
|
|
|
use the PHP stream wrapper and simply send requests serially.
|
|
|
|
|
|
|
|
message_factory
|
|
|
|
Specifies the factory used to create HTTP requests and responses
|
|
|
|
(``GuzzleHttp\Message\MessageFactoryInterface``).
|
|
|
|
|
|
|
|
defaults
|
2014-02-17 17:37:20 -08:00
|
|
|
Associative array of :ref:`request-options` that are applied to every
|
|
|
|
request created by the client. This allows you to specify things like
|
|
|
|
default headers (e.g., User-Agent), default query string parameters, SSL
|
|
|
|
configurations, and any other supported request options.
|
2014-02-13 23:37:34 -08:00
|
|
|
|
|
|
|
Here's an example of creating a client with various options, including using
|
|
|
|
a mock adapter that just returns the result of a callable function and a
|
|
|
|
base URL that is a URI template with parameters.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
use GuzzleHttp\Client;
|
|
|
|
|
|
|
|
$client = new Client([
|
2014-02-18 20:42:16 -08:00
|
|
|
'base_url' => ['https://api.twitter.com/{version}', ['version' => 'v1.1']],
|
2014-02-13 23:37:34 -08:00
|
|
|
'defaults' => [
|
|
|
|
'headers' => ['Foo' => 'Bar'],
|
|
|
|
'query' => ['testing' => '123'],
|
|
|
|
'auth' => ['username', 'password'],
|
|
|
|
'proxy' => 'tcp://localhost:80'
|
|
|
|
]
|
|
|
|
]);
|
|
|
|
|
|
|
|
Sending Requests
|
|
|
|
================
|
|
|
|
|
|
|
|
Requests can be created using various methods of a client. You can create
|
|
|
|
**and** send requests using one of the following methods:
|
|
|
|
|
|
|
|
- ``GuzzleHttp\Client::get``: Sends a GET request.
|
|
|
|
- ``GuzzleHttp\Client::head``: Sends a HEAD request
|
|
|
|
- ``GuzzleHttp\Client::post``: Sends a POST request
|
|
|
|
- ``GuzzleHttp\Client::put``: Sends a PUT request
|
|
|
|
- ``GuzzleHttp\Client::delete``: Sends a DELETE request
|
|
|
|
- ``GuzzleHttp\Client::options``: Sends an OPTIONS request
|
|
|
|
|
2014-02-15 11:59:31 -08:00
|
|
|
Each of the above methods accepts a URL as the first argument and an optional
|
|
|
|
associative array of :ref:`request-options` as the second argument.
|
2014-02-13 23:37:34 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$client = new GuzzleHttp\Client();
|
|
|
|
|
|
|
|
$client->put('http://httpbin.org', [
|
|
|
|
'headers' => ['X-Foo' => 'Bar'],
|
|
|
|
'body' => 'this is the body!',
|
|
|
|
'save_to' => '/path/to/local/file',
|
|
|
|
'allow_redirects' => false,
|
|
|
|
'timeout' => 5
|
|
|
|
]);
|
|
|
|
|
2014-02-15 11:59:31 -08:00
|
|
|
Error Handling
|
|
|
|
--------------
|
|
|
|
|
2014-02-17 17:37:20 -08:00
|
|
|
When a recoverable error is encountered while calling the ``send()`` method of
|
|
|
|
a client, a ``GuzzleHttp\Exception\RequestException`` is thrown.
|
2014-02-15 11:59:31 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
use GuzzleHttp\Client;
|
|
|
|
use GuzzleHttp\Exception\RequestException;
|
|
|
|
|
|
|
|
$client = new Client();
|
|
|
|
|
|
|
|
try {
|
|
|
|
$client->get('http://httpbin.org');
|
|
|
|
} catch (RequestException $e) {
|
|
|
|
echo $e->getRequest() . "\n";
|
2014-02-15 14:15:27 -08:00
|
|
|
if ($e->hasResponse()) {
|
|
|
|
echo $e->getResponse() . "\n";
|
|
|
|
}
|
2014-02-15 11:59:31 -08:00
|
|
|
}
|
|
|
|
|
2014-02-17 17:37:20 -08:00
|
|
|
``GuzzleHttp\Exception\RequestException`` always contains a
|
2014-02-15 11:59:31 -08:00
|
|
|
``GuzzleHttp\Message\RequestInterface`` object that can be accessed using the
|
2014-02-17 17:37:20 -08:00
|
|
|
exception's ``getRequest()`` method.
|
|
|
|
|
|
|
|
A response might be present in the exception. In the event of a networking
|
|
|
|
error, no response will be received. You can check if a ``RequestException``
|
|
|
|
has a response using the ``hasResponse()`` method. If the exception has a
|
|
|
|
response, then you can access the associated
|
|
|
|
``GuzzleHttp\Message\ResponseInterface`` using the ``getResponse()`` method of
|
|
|
|
the exception.
|
|
|
|
|
|
|
|
HTTP Errors
|
|
|
|
~~~~~~~~~~~
|
|
|
|
|
|
|
|
If the ``exceptions`` request option is not set to ``false``, then exceptions
|
|
|
|
are thrown for HTTP protocol errors as well:
|
|
|
|
``GuzzleHttp\Exception\ClientErrorResponseException`` for 4xx level HTTP
|
|
|
|
responses and ``GuzzleHttp\Exception\ServerException`` for 5xx level responses,
|
|
|
|
both of which extend from ``GuzzleHttp\Exception\BadResponseException``.
|
2014-02-15 11:59:31 -08:00
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
Creating Requests
|
|
|
|
-----------------
|
|
|
|
|
2014-02-15 11:59:31 -08:00
|
|
|
You can create a request without sending it. This is useful for building up
|
|
|
|
requests over time or sending requests in parallel.
|
2014-02-13 23:37:34 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$request = $client->createRequest('GET', 'http://httpbin.org', [
|
|
|
|
'headers' => ['X-Foo' => 'Bar']
|
|
|
|
]);
|
|
|
|
|
|
|
|
// Modify the request as needed
|
|
|
|
$request->setHeader('Baz', 'bar');
|
|
|
|
|
|
|
|
After creating a request, you can send it with the client's ``send()`` method.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$response = $client->send($request);
|
|
|
|
|
|
|
|
Sending Requests in Parallel
|
2014-02-15 11:59:31 -08:00
|
|
|
============================
|
2014-02-13 23:37:34 -08:00
|
|
|
|
|
|
|
You can send requests in parallel using a client object's ``sendAll()`` method.
|
|
|
|
The ``sendAll()`` method accepts an array or ``\Iterator`` that contains
|
|
|
|
``GuzzleHttp\Message\RequestInterface`` objects. In addition to providing the
|
|
|
|
requests to send, you can also specify an associative array of options that
|
|
|
|
will affect the transfer.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$requests = [
|
|
|
|
$client->createRequest('GET', 'http://httpbin.org'),
|
|
|
|
$client->createRequest('DELETE', 'http://httpbin.org/delete'),
|
|
|
|
$client->createRequest('PUT', 'http://httpbin.org/put', ['body' => 'test'])
|
|
|
|
];
|
|
|
|
|
|
|
|
$client->sendAll($requests);
|
|
|
|
|
2014-03-18 21:38:27 -07:00
|
|
|
The ``sendAll()`` method accepts the following associative array of options:
|
|
|
|
|
|
|
|
- **parallel**: Integer representing the maximum number of requests that are
|
|
|
|
allowed to be sent in parallel.
|
|
|
|
- **before**: Callable or array representing an event listener to add to each
|
|
|
|
request's :ref:`before_event` event. You can provide a callable (invoked at
|
|
|
|
priority 0), or an array containing a callable in the first index and an
|
|
|
|
event priority in the second index.
|
|
|
|
- **complete**: Callable or array representing an event listener to add to each
|
|
|
|
request's :ref:`complete_event` event. This option has the same structure as
|
|
|
|
the *before* option.
|
|
|
|
- **error**: Callable or array representing an event listener to add to each
|
|
|
|
request's :ref:`error_event` event. This option has the same structure as
|
|
|
|
the *before* option.
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
You can work with the responses for each request as the are received using the
|
|
|
|
events emitted from a request. Here we are using the ``complete`` event and
|
|
|
|
printing out each request URL and response body.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
use GuzzleHttp\Event\CompleteEvent;
|
|
|
|
|
|
|
|
$client->sendAll($requests, [
|
|
|
|
'complete' => function (CompleteEvent $event) {
|
|
|
|
echo 'Completed request to ' . $event->getRequest()->getUrl() . "\n";
|
|
|
|
echo 'Response: ' . $event->getResponse()->getBody() . "\n\n";
|
|
|
|
}
|
|
|
|
]);
|
|
|
|
|
2014-02-15 11:59:31 -08:00
|
|
|
Asynchronous Error Handling
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
You can handle errors when transferring requests in parallel using the event
|
|
|
|
system.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
use GuzzleHttp\Event\ErrorEvent;
|
|
|
|
|
|
|
|
$client->sendAll($requests, [
|
|
|
|
'error' => function (ErrorEvent $event) {
|
|
|
|
echo 'Request failed: ' . $event->getRequest()->getUrl() . "\n"
|
|
|
|
echo $event->getException();
|
|
|
|
}
|
|
|
|
]);
|
|
|
|
|
|
|
|
The ``GuzzleHttp\Event\ErrorEvent`` event object is emitted when an error
|
|
|
|
occurs during a transfer. With this event, you have access to the request that
|
|
|
|
was sent, the response that was received (if one was received), access to
|
|
|
|
transfer statistics, and the ability to intercept the exception with a
|
|
|
|
different ``GuzzleHttp\Message\ResponseInterface`` object. See :doc:`events`
|
|
|
|
for more information.
|
|
|
|
|
|
|
|
Handling Errors After Transferring
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
Here we are adding each failed request to an array that we can use to process
|
|
|
|
errors later.
|
2014-02-13 23:37:34 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
use GuzzleHttp\Event\ErrorEvent;
|
|
|
|
|
|
|
|
$errors = [];
|
|
|
|
$client->sendAll($requests, [
|
|
|
|
'error' => function (ErrorEvent $event) use (&$errors) {
|
|
|
|
$errors[] = $event;
|
|
|
|
}
|
|
|
|
]);
|
|
|
|
|
|
|
|
foreach ($errors as $error) {
|
2014-02-15 11:59:31 -08:00
|
|
|
// ...
|
2014-02-13 23:37:34 -08:00
|
|
|
}
|
|
|
|
|
2014-02-15 11:59:31 -08:00
|
|
|
Throwing Errors Immediately
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
You can throw exceptions immediately as they are encountered.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
use GuzzleHttp\Event\ErrorEvent;
|
|
|
|
|
|
|
|
$client->sendAll($requests, [
|
|
|
|
'error' => function (ErrorEvent $event) use (&$errors) {
|
|
|
|
throw $event->getException();
|
|
|
|
}
|
|
|
|
]);
|
|
|
|
|
|
|
|
.. _request-options:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
Request Options
|
|
|
|
===============
|
|
|
|
|
2014-02-15 23:40:24 -08:00
|
|
|
You can customize requests created by a client using **request options**.
|
|
|
|
Request options control various aspects of a request including, headers,
|
|
|
|
query string parameters, timeout settings, the body of a request, and much
|
|
|
|
more.
|
|
|
|
|
|
|
|
All of the following examples use the following client:
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$client = new GuzzleHttp\Client(['base_url' => 'http://httpbin.org']);
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
headers
|
|
|
|
-------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Associative array of headers to add to the request. Each key is the
|
|
|
|
name of a header, and each value is a string or array of strings
|
|
|
|
representing the header field values.
|
|
|
|
:Types: array
|
|
|
|
:Defaults: None
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// Set various headers on a request
|
|
|
|
$client->get('/get', [
|
|
|
|
'headers' => [
|
|
|
|
'User-Agent' => 'testing/1.0',
|
|
|
|
'Accept' => 'application/json',
|
|
|
|
'X-Foo' => ['Bar', 'Baz']
|
|
|
|
]
|
|
|
|
]);
|
2014-02-13 23:37:34 -08:00
|
|
|
|
|
|
|
body
|
|
|
|
----
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: The ``body`` option is used to control the body of an entity
|
|
|
|
enclosing request (e.g., PUT, POST, PATCH).
|
|
|
|
:Types:
|
|
|
|
- string
|
|
|
|
- ``fopen()`` resource
|
|
|
|
- ``GuzzleHttp\Stream\StreamInterface``
|
2014-02-17 20:55:48 -08:00
|
|
|
- ``GuzzleHttp\Post\PostBodyInterface``
|
2014-02-16 12:17:02 -08:00
|
|
|
:Default: None
|
|
|
|
|
|
|
|
This setting can be set to any of the following types:
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
- string
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// You can send requests that use a string as the message body.
|
|
|
|
$client->put('/put', ['body' => 'foo']);
|
|
|
|
|
|
|
|
- resource returned from ``fopen()``
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// You can send requests that use a stream resource as the body.
|
|
|
|
$resource = fopen('http://httpbin.org', 'r');
|
|
|
|
$client->put('/put', ['body' => $resource]);
|
|
|
|
|
|
|
|
- Array
|
|
|
|
|
|
|
|
Use an array to send POST style requests that use a
|
2014-02-17 20:55:48 -08:00
|
|
|
``GuzzleHttp\Post\PostBodyInterface`` object as the body.
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// You can send requests that use a POST body containing fields & files.
|
|
|
|
$client->post('/post', [
|
|
|
|
'body' => [
|
|
|
|
'field' => 'abc',
|
|
|
|
'other_field' => '123',
|
|
|
|
'file_name' => fopen('/path/to/file', 'r')
|
|
|
|
]
|
|
|
|
]);
|
|
|
|
|
|
|
|
- ``GuzzleHttp\Stream\StreamInterface``
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// You can send requests that use a Guzzle stream object as the body
|
|
|
|
$stream = GuzzleHttp\Stream\Stream::factory('contents...');
|
|
|
|
$client->post('/post', ['body' => $stream]);
|
2014-02-13 23:37:34 -08:00
|
|
|
|
|
|
|
query
|
|
|
|
-----
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Associative array of query string values to add to the request.
|
|
|
|
:Types:
|
|
|
|
- array
|
2014-02-16 21:02:54 -08:00
|
|
|
- ``GuzzleHttp\Query``
|
2014-02-16 12:17:02 -08:00
|
|
|
:Default: None
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-02-15 23:40:24 -08:00
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// Send a GET request to /get?foo=bar
|
|
|
|
$client->get('/get', ['query' => ['foo' => 'bar']);
|
|
|
|
|
|
|
|
Query strings specified in the ``query`` option are combined with any query
|
|
|
|
string values that are parsed from the URL.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// Send a GET request to /get?abc=123&foo=bar
|
|
|
|
$client->get('/get?abc=123', ['query' => ['foo' => 'bar']);
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
auth
|
|
|
|
----
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Pass an array of HTTP authentication parameters to use with the
|
|
|
|
request. The array must contain the username in index [0], the password in
|
|
|
|
index [1], and you can optionally provide a built-in authentication type in
|
2014-02-16 15:45:43 -08:00
|
|
|
index [2]. Pass ``null`` to disable authentication for a request.
|
2014-02-16 12:17:02 -08:00
|
|
|
:Types:
|
|
|
|
- array
|
|
|
|
- string
|
2014-02-16 15:45:43 -08:00
|
|
|
- null
|
2014-02-16 12:17:02 -08:00
|
|
|
:Default: None
|
2014-02-15 23:40:24 -08:00
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
The built-in authentication types are as follows:
|
2014-02-15 23:40:24 -08:00
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
basic
|
2014-02-15 23:40:24 -08:00
|
|
|
Use `basic HTTP authentication <http://www.ietf.org/rfc/rfc2069.txt>`_ in
|
|
|
|
the ``Authorization`` header (the default setting used if none is
|
|
|
|
specified).
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$client->get('/get', ['auth' => ['username', 'password']]);
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
digest
|
2014-02-15 23:40:24 -08:00
|
|
|
Use `digest authentication <http://www.ietf.org/rfc/rfc2069.txt>`_ (must be
|
|
|
|
supported by the HTTP adapter).
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
$client->get('/get', ['auth' => ['username', 'password', 'digest']]);
|
2014-02-15 23:40:24 -08:00
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
*This is currently only supported when using the cURL adapter, but creating
|
|
|
|
a replacement that can be used with any HTTP adapter is planned.*
|
2014-02-15 23:40:24 -08:00
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
.. important::
|
|
|
|
|
|
|
|
The authentication type (whether it's provided as a string or as the third
|
|
|
|
option in an array) is always converted to a lowercase string. Take this
|
|
|
|
into account when implementing custom authentication types and when
|
|
|
|
implementing custom message factories.
|
|
|
|
|
|
|
|
Custom Authentication Schemes
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
You can also provide a string representing a custom authentication type name.
|
|
|
|
When using a custom authentication type string, you will need to implement
|
|
|
|
the authentication method in an event listener that checks the ``auth`` request
|
2014-02-16 12:26:49 -08:00
|
|
|
option of a request before it is sent. Authentication listeners that require
|
|
|
|
a request is not modified after they are signed should have a very low priority
|
|
|
|
to ensure that they are fired last or near last in the event chain.
|
2014-02-16 12:17:02 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
use GuzzleHttp\Event\BeforeEvent;
|
2014-03-12 19:34:27 -07:00
|
|
|
use GuzzleHttp\Event\RequestEvents;
|
2014-02-16 12:17:02 -08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Custom authentication listener that handles the "foo" auth type.
|
|
|
|
*
|
|
|
|
* Listens to the "before" event of a request and only modifies the request
|
|
|
|
* when the "auth" config setting of the request is "foo".
|
|
|
|
*/
|
|
|
|
class FooAuth implements GuzzleHttp\Common\SubscriberInterface
|
|
|
|
{
|
|
|
|
private $password;
|
|
|
|
|
2014-03-07 10:14:17 -08:00
|
|
|
public function __construct($password)
|
2014-02-16 12:17:02 -08:00
|
|
|
{
|
2014-03-07 10:14:17 -08:00
|
|
|
$this->password = $password;
|
2014-02-16 12:17:02 -08:00
|
|
|
}
|
2014-02-15 23:40:24 -08:00
|
|
|
|
2014-03-07 10:14:17 -08:00
|
|
|
public function getEvents()
|
2014-02-16 12:17:02 -08:00
|
|
|
{
|
2014-03-12 19:34:27 -07:00
|
|
|
return ['before' => ['sign', RequestEvents::SIGN_REQUEST]];
|
2014-02-16 12:17:02 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
public function sign(BeforeEvent $e)
|
|
|
|
{
|
|
|
|
if ($e->getRequest()->getConfig()['auth'] == 'foo') {
|
|
|
|
$e->getRequest()->setHeader('X-Foo', 'Foo ' . $this->password);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-03-07 10:14:17 -08:00
|
|
|
$client->getEmitter->attach(new FooAuth('password'));
|
2014-02-16 12:17:02 -08:00
|
|
|
$client->get('/', ['auth' => 'foo']);
|
|
|
|
|
|
|
|
Adapter Specific Authentication Schemes
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
If you need to use authentication methods provided by cURL (e.g., NTLM, GSS,
|
|
|
|
etc...), then you need to specify a curl adapter option in the ``options``
|
2014-03-12 19:00:11 -07:00
|
|
|
request option array. See :ref:`config-option` for more information.
|
|
|
|
|
|
|
|
.. _cookies-option:
|
2014-02-13 23:37:34 -08:00
|
|
|
|
|
|
|
cookies
|
|
|
|
-------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Specifies whether or not cookies are used in a request or what cookie
|
|
|
|
jar to use or what cookies to send.
|
|
|
|
:Types:
|
|
|
|
- bool
|
|
|
|
- array
|
2014-03-05 00:55:37 -08:00
|
|
|
- ``GuzzleHttp\Cookie\CookieJarInterface``
|
2014-02-16 12:17:02 -08:00
|
|
|
:Default: None
|
|
|
|
|
2014-02-15 23:40:24 -08:00
|
|
|
Set to ``true`` to use a shared cookie session associated with the client.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// Enable cookies using the shared cookie jar of the client.
|
|
|
|
$client->get('/get', ['cookies' => true]);
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
Pass an associative array containing cookies to send in the request and start a
|
2014-02-15 23:40:24 -08:00
|
|
|
new cookie session.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// Enable cookies and send specific cookies
|
|
|
|
$client->get('/get', ['cookies' => ['foo' => 'bar']]);
|
|
|
|
|
2014-03-05 00:55:37 -08:00
|
|
|
Set to a ``GuzzleHttp\Cookie\CookieJarInterface`` object to use an existing
|
2014-02-15 23:40:24 -08:00
|
|
|
cookie jar.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
2014-03-05 00:55:37 -08:00
|
|
|
$jar = new GuzzleHttp\Cookie\CookieJar();
|
2014-02-15 23:40:24 -08:00
|
|
|
$client->get('/get', ['cookies' => $jar]);
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _allow_redirects-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
allow_redirects
|
|
|
|
---------------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Describes the redirect behavior of a request
|
|
|
|
:Types:
|
|
|
|
- bool
|
|
|
|
- array
|
2014-02-17 17:37:20 -08:00
|
|
|
:Default: ``['max' => 5, 'strict' => false, 'referer' => true]``
|
2014-02-16 12:17:02 -08:00
|
|
|
|
2014-02-15 23:40:24 -08:00
|
|
|
Set to ``false`` to disable redirects.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$res = $client->get('/redirect/3', ['allow_redirects' => false]);
|
|
|
|
echo $res->getStatusCode();
|
|
|
|
// 302
|
|
|
|
|
|
|
|
Set to ``true`` (the default setting) to enable normal redirects with a maximum
|
|
|
|
number of 5 redirects.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$res = $client->get('/redirect/3');
|
|
|
|
echo $res->getStatusCode();
|
|
|
|
// 200
|
|
|
|
|
|
|
|
Pass an associative array containing the 'max' key to specify the maximum
|
2014-02-17 17:37:20 -08:00
|
|
|
number of redirects, optionally provide a 'strict' key value to specify
|
2014-02-15 23:40:24 -08:00
|
|
|
whether or not to use strict RFC compliant redirects (meaning redirect POST
|
|
|
|
requests with POST requests vs. doing what most browsers do which is redirect
|
2014-02-17 17:37:20 -08:00
|
|
|
POST requests with GET requests), and optionally provide a 'referer' key to
|
|
|
|
specify whether or not the "Referer" header should be added when redirecting.
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$res = $client->get('/redirect/3', [
|
|
|
|
'allow_redirects' => [
|
2014-02-17 17:37:20 -08:00
|
|
|
'max' => 10,
|
|
|
|
'strict' => true,
|
|
|
|
'referer' => true
|
2014-02-15 23:40:24 -08:00
|
|
|
]
|
|
|
|
]);
|
|
|
|
echo $res->getStatusCode();
|
|
|
|
// 200
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _save_to-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
save_to
|
|
|
|
-------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Specify where the body of a response will be saved.
|
|
|
|
:Types:
|
|
|
|
- string
|
|
|
|
- ``fopen()`` resource
|
|
|
|
- ``GuzzleHttp\Stream\StreamInterface``
|
|
|
|
:Default: PHP temp stream
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
Pass a string to specify the path to a file that will store the contents of the
|
2014-02-16 12:17:02 -08:00
|
|
|
response body:
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$client->get('/stream/20', ['save_to' => '/path/to/file']);
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
Pass a resource returned from ``fopen()`` to write the response to a PHP stream:
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$resource = fopen('/path/to/file', 'w');
|
|
|
|
$client->get('/stream/20', ['save_to' => $resource]);
|
|
|
|
|
|
|
|
Pass a ``GuzzleHttp\Stream\StreamInterface`` object to stream the response body
|
2014-02-16 12:17:02 -08:00
|
|
|
to an open Guzzle stream:
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$resource = fopen('/path/to/file', 'w');
|
|
|
|
$stream = GuzzleHttp\Stream\Stream::factory($resource);
|
|
|
|
$client->get('/stream/20', ['save_to' => $stream]);
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _events-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
events
|
|
|
|
------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Associative array mapping event names to a callable. or an
|
|
|
|
associative array containing the 'fn' key that maps to a callable, an
|
|
|
|
optional 'priority' key used to specify the event priority, and an optional
|
|
|
|
'once' key used to specify if the event should remove itself the first time
|
|
|
|
it is triggered.
|
|
|
|
:Types: array
|
|
|
|
:Default: None
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-02-15 23:40:24 -08:00
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
use GuzzleHttp\Event\BeforeEvent;
|
|
|
|
use GuzzleHttp\Event\HeadersEvent;
|
|
|
|
use GuzzleHttp\Event\CompleteEvent;
|
|
|
|
use GuzzleHttp\Event\ErrorEvent;
|
|
|
|
|
|
|
|
$client->get('/', [
|
|
|
|
'events' => [
|
|
|
|
'before' => function (BeforeEvent $e) { echo 'Before'; },
|
|
|
|
'headers' => function (HeadersEvent $e) { echo 'Headers'; },
|
|
|
|
'complete' => function (CompleteEvent $e) { echo 'Complete'; },
|
|
|
|
'error' => function (ErrorEvent $e) { echo 'Error'; },
|
|
|
|
]
|
|
|
|
]);
|
|
|
|
|
|
|
|
Here's an example of using the associative array format for control over the
|
|
|
|
priority and whether or not an event should be triggered more than once.
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$client->get('/', [
|
|
|
|
'events' => [
|
|
|
|
'before' => [
|
|
|
|
'fn' => function (BeforeEvent $e) { echo 'Before'; },
|
|
|
|
'priority' => 100,
|
|
|
|
'once' => true
|
|
|
|
]
|
|
|
|
]
|
|
|
|
]);
|
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _subscribers-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
subscribers
|
|
|
|
-----------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Array of event subscribers to add to the request. Each value in the
|
2014-02-16 20:10:19 -08:00
|
|
|
array must be an instance of ``GuzzleHttp\Event\SubscriberInterface``.
|
2014-02-16 12:17:02 -08:00
|
|
|
:Types: array
|
|
|
|
:Default: None
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-02-15 23:40:24 -08:00
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
use GuzzleHttp\Subscriber\History;
|
|
|
|
use GuzzleHttp\Subscriber\Mock;
|
|
|
|
use GuzzleHttp\Message\Response;
|
|
|
|
|
|
|
|
$history = new History();
|
|
|
|
$mock = new Mock([new Response(200)]);
|
|
|
|
$client->get('/', ['subscribers' => [$history, $mock]]);
|
|
|
|
|
|
|
|
echo $history;
|
|
|
|
// Outputs the request and response history
|
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _exceptions-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
exceptions
|
|
|
|
----------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Set to ``false`` to disable throwing exceptions on an HTTP protocol
|
|
|
|
errors (i.e., 4xx and 5xx responses). Exceptions are thrown by default when
|
|
|
|
HTTP protocol errors are encountered.
|
|
|
|
:Types: bool
|
|
|
|
:Default: ``true``
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$client->get('/status/500');
|
|
|
|
// Throws a GuzzleHttp\Exception\ServerException
|
|
|
|
|
|
|
|
$res = $client->get('/status/500', ['exceptions' => false]);
|
|
|
|
echo $res->getStatusCode();
|
|
|
|
// 500
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _timeout-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
timeout
|
|
|
|
-------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Float describing the timeout of the request in seconds. Use ``0``
|
|
|
|
to wait indefinitely (the default behavior).
|
|
|
|
:Types: float
|
|
|
|
:Default: ``0``
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// Timeout if a server does not return a response in 3.14 seconds.
|
|
|
|
$client->get('/delay/5', ['timeout' => 3.14]);
|
2014-02-16 20:10:19 -08:00
|
|
|
// PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException'
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _connect_timeout-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
connect_timeout
|
|
|
|
---------------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Float describing the number of seconds to wait while trying to connect
|
|
|
|
to a server. Use ``0`` to wait indefinitely (the default behavior).
|
|
|
|
:Types: float
|
|
|
|
:Default: ``0``
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// Timeout if the client fails to connect to the server in 3.14 seconds.
|
|
|
|
$client->get('/delay/5', ['connect_timeout' => 3.14]);
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
This setting must be supported by the HTTP adapter used to send a request.
|
|
|
|
``connect_timeout`` is currently only supported by the built-in cURL
|
|
|
|
adapter.
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _verify-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
verify
|
|
|
|
------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Describes the SSL certificate verification behavior of a request.
|
|
|
|
Set to ``true`` to enable SSL certificate verification (the default). Set
|
|
|
|
to ``false`` to disable certificate verification (this is insecure!). Set
|
|
|
|
to a string to provide the path to a CA bundle to enable verification using
|
|
|
|
a custom certificate.
|
|
|
|
:Types:
|
|
|
|
- bool
|
|
|
|
- string
|
|
|
|
:Default: ``true``
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// Use a custom SSL certificate
|
|
|
|
$client->get('/', ['verify' => '/path/to/cert.pem']);
|
|
|
|
|
|
|
|
// Disable validation
|
|
|
|
$client->get('/', ['verify' => false]);
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _cert-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
cert
|
|
|
|
----
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Set to a string to specify the path to a file containing a PEM
|
|
|
|
formatted client side certificate. If a password is required, then set to
|
|
|
|
an array containing the path to the PEM file in the first array element
|
|
|
|
followed by the password required for the certificate in the second array
|
|
|
|
element.
|
|
|
|
:Types:
|
|
|
|
- string
|
|
|
|
- array
|
|
|
|
:Default: None
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$client->get('/', ['cert' => ['/path/server.pem', 'password']]);
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _ssl_key-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
ssl_key
|
|
|
|
-------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Specify the path to a file containing a private SSL key in PEM
|
|
|
|
format. If a password is required, then set to an array containing the path
|
|
|
|
to the SSL key in the first array element followed by the password required
|
|
|
|
for the certificate in the second element.
|
|
|
|
:Types:
|
|
|
|
- string
|
|
|
|
- array
|
|
|
|
:Default: None
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
``ssl_key`` is implemented by HTTP adapters. This is currently only
|
|
|
|
supported by the cURL adapter, but might be supported by other third-part
|
|
|
|
adapters.
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _proxy-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
proxy
|
|
|
|
-----
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Pass a string to specify an HTTP proxy, or an array to specify
|
|
|
|
different proxies for different protocols.
|
|
|
|
:Types:
|
|
|
|
- string
|
|
|
|
- array
|
|
|
|
:Default: None
|
|
|
|
|
|
|
|
Pass a string to specify a proxy for all protocols.
|
2014-02-16 00:13:49 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$client->get('/', ['proxy' => 'tcp://localhost:8124']);
|
|
|
|
|
|
|
|
Pass an associative array to specify HTTP proxies for specific URI schemes
|
|
|
|
(i.e., "http", "https").
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$client->get('/', [
|
|
|
|
'proxy' => [
|
|
|
|
'http' => 'tcp://localhost:8124', // Use this proxy with "http"
|
|
|
|
'https' => 'tcp://localhost:9124' // Use this proxy with "https"
|
|
|
|
]
|
|
|
|
]);
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
You can provide proxy URLs that contain a scheme, username, and password.
|
|
|
|
For example, ``"http://username:password@192.168.16.1:10"``.
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _debug-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
debug
|
|
|
|
-----
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Set to ``true`` or set to a PHP stream returned by ``fopen()`` to
|
|
|
|
enable debug output with the adapter used to send a request. For example,
|
|
|
|
when using cURL to transfer requests, cURL's verbose of ``CURLOPT_VERBOSE``
|
|
|
|
will be emitted. When using the PHP stream wrapper, stream wrapper
|
|
|
|
notifications will be emitted. If set to true, the output is written to
|
|
|
|
PHP's STDOUT. If a PHP stream is provided, output is written to the stream.
|
|
|
|
:Types:
|
|
|
|
- bool
|
|
|
|
- ``fopen()`` resource
|
|
|
|
:Default: None
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$client->get('/get', ['debug' => true]);
|
|
|
|
|
|
|
|
Running the above example would output something like the following:
|
|
|
|
|
|
|
|
::
|
|
|
|
|
|
|
|
* About to connect() to httpbin.org port 80 (#0)
|
|
|
|
* Trying 107.21.213.98... * Connected to httpbin.org (107.21.213.98) port 80 (#0)
|
|
|
|
> GET /get HTTP/1.1
|
|
|
|
Host: httpbin.org
|
|
|
|
User-Agent: Guzzle/4.0 curl/7.21.4 PHP/5.5.7
|
|
|
|
|
|
|
|
< HTTP/1.1 200 OK
|
|
|
|
< Access-Control-Allow-Origin: *
|
|
|
|
< Content-Type: application/json
|
|
|
|
< Date: Sun, 16 Feb 2014 06:50:09 GMT
|
|
|
|
< Server: gunicorn/0.17.4
|
|
|
|
< Content-Length: 335
|
|
|
|
< Connection: keep-alive
|
|
|
|
<
|
|
|
|
* Connection #0 to host httpbin.org left intact
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _stream-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
stream
|
|
|
|
------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Set to ``true`` to stream a response rather than download it all
|
|
|
|
up-front.
|
|
|
|
:Types: bool
|
|
|
|
:Default: ``false``
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
$response = $client->get('/stream/20', ['stream' => true]);
|
|
|
|
// Read bytes off of the stream until the end of the stream is reached
|
|
|
|
$body = $response->getBody();
|
|
|
|
while (!$body->eof()) {
|
|
|
|
echo $body->read(1024);
|
|
|
|
}
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
Streaming response support must be implemented by the HTTP adapter used by
|
|
|
|
a client. This option might not be supported by every HTTP adapter, but the
|
|
|
|
interface of the response object remains the same regardless of whether or
|
|
|
|
not it is supported by the adapter.
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _expect-option:
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
expect
|
|
|
|
------
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
:Summary: Controls the behavior of the "Expect: 100-Continue" header.
|
|
|
|
:Types:
|
|
|
|
- bool
|
|
|
|
- integer
|
|
|
|
:Default: ``1048576``
|
|
|
|
|
2014-02-15 23:40:24 -08:00
|
|
|
Set to ``true`` to enable the "Expect: 100-Continue" header for all requests
|
|
|
|
that sends a body. Set to ``false`` to disable the "Expect: 100-Continue"
|
|
|
|
header for all requests. Set to a number so that the size of the payload must
|
|
|
|
be greater than the number in order to send the Expect header. Setting to a
|
|
|
|
number will send the Expect header for all requests in which the size of the
|
|
|
|
payload cannot be determined or where the body is not rewindable.
|
|
|
|
|
|
|
|
By default, Guzzle will add the "Expect: 100-Continue" header when the size of
|
2014-02-17 10:27:56 -08:00
|
|
|
the body of a request is greater than 1 MB and a request is using HTTP/1.1.
|
2014-02-15 23:40:24 -08:00
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
2014-02-17 10:27:56 -08:00
|
|
|
This option only takes effect when using HTTP/1.1. The HTTP/1.0 and
|
|
|
|
HTTP/2.0 protocols do not support the "Expect: 100-Continue" header.
|
|
|
|
Support for handling the "Expect: 100-Continue" workflow must be
|
|
|
|
implemented by Guzzle HTTP adapters used by a client.
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _version-option:
|
|
|
|
|
2014-02-17 10:27:56 -08:00
|
|
|
version
|
|
|
|
-------
|
|
|
|
|
|
|
|
:Summary: Protocol version to use with the request.
|
|
|
|
:Types: string, float
|
|
|
|
:Default: ``1.1``
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
// Force HTTP/1.0
|
|
|
|
$request = $client->createRequest('GET', '/get', ['version' => 1.0]);
|
|
|
|
echo $request->getProtocolVersion();
|
|
|
|
// 1.0
|
|
|
|
|
2014-03-12 19:00:11 -07:00
|
|
|
.. _config-option:
|
2014-02-17 17:37:20 -08:00
|
|
|
|
|
|
|
config
|
|
|
|
------
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-02-17 17:37:20 -08:00
|
|
|
:Summary: Associative array of config options that are forwarded to a request's
|
2014-02-16 12:17:02 -08:00
|
|
|
configuration collection. These values are used as configuration options
|
|
|
|
that can be consumed by plugins and adapters.
|
|
|
|
:Types: array
|
|
|
|
:Default: None
|
2014-02-13 23:37:34 -08:00
|
|
|
|
2014-02-15 23:40:24 -08:00
|
|
|
.. code-block:: php
|
|
|
|
|
2014-02-17 17:37:20 -08:00
|
|
|
$request = $client->createRequest('GET', '/get', ['config' => ['foo' => 'bar']]);
|
2014-02-15 23:40:24 -08:00
|
|
|
echo $request->getConfig('foo');
|
|
|
|
// 'bar'
|
|
|
|
|
2014-02-16 00:13:49 -08:00
|
|
|
Some HTTP adapters allow you to specify custom adapter-specific settings. For
|
|
|
|
example, you can pass custom cURL options to requests by passing an associative
|
2014-02-17 17:37:20 -08:00
|
|
|
array in the ``config`` request option under the ``curl`` key.
|
2014-02-16 00:13:49 -08:00
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
2014-02-16 12:17:02 -08:00
|
|
|
// Use custom cURL options with the request. This example uses NTLM auth
|
|
|
|
// to authenticate with a server.
|
2014-02-16 00:13:49 -08:00
|
|
|
$client->get('/', [
|
2014-02-17 17:37:20 -08:00
|
|
|
'config' => [
|
2014-02-16 00:13:49 -08:00
|
|
|
'curl' => [
|
2014-02-16 12:17:02 -08:00
|
|
|
CURLOPT_HTTPAUTH => CURLAUTH_NTLM,
|
|
|
|
CURLOPT_USERPWD => 'username:password'
|
2014-02-16 00:13:49 -08:00
|
|
|
]
|
|
|
|
]
|
|
|
|
]);
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
Event Subscribers
|
|
|
|
=================
|
|
|
|
|
|
|
|
Requests emit lifecycle events when they are transferred. A client object has a
|
|
|
|
``GuzzleHttp\Common\EventEmitter`` object that can be used to add event
|
|
|
|
*listeners* and event *subscribers* to all requests created by the client.
|
|
|
|
|
2014-02-15 23:47:49 -08:00
|
|
|
.. important::
|
|
|
|
|
|
|
|
**Every** event listener or subscriber added to a client will be added to
|
|
|
|
every request created by the client.
|
|
|
|
|
2014-02-13 23:37:34 -08:00
|
|
|
.. code-block:: php
|
|
|
|
|
|
|
|
use GuzzleHttp\Client;
|
|
|
|
use GuzzleHttp\Event\BeforeEvent;
|
|
|
|
|
|
|
|
$client = new Client();
|
|
|
|
|
|
|
|
// Add a listener that will echo out requests before they are sent
|
|
|
|
$client->getEmitter()->on('before', function (BeforeEvent $e) {
|
|
|
|
echo 'About to send request: ' . $e->getRequest();
|
|
|
|
});
|
|
|
|
|
|
|
|
$client->get('http://httpbin.org/get');
|
|
|
|
// Outputs the request as a string because of the event
|
|
|
|
|
|
|
|
See :doc:`events` for more information on the event system used in Guzzle.
|