Requests are now prepared in the send() method rather than the add()
method when adding a request during a transfer. The send() method now
only prepares requests in the current scope in which the send method was
called. This allows for better handling of commands that require a
request in order to prepare themselves for sending (e.g. a request that
requires a token that requires an HTTP request). The BatchQueuePlugin
and CommandSet no longer add requests using async as that was a hack to
support the previous implementation.
[BC] [Service] Moving Guzzle\Service\Builder to
Guzzle\Service\Builder\ServiceBuilder
[Service] Creating an AbstractFactory used to delegate class
instantiation to a concrete factory. Used with service builders and
service descriptions
[Service] Making service descriptions and builders cacheable
[Service] Adding the ability to set global option overrides to service
builder configs. These options are applied to each service owned by a
service builder. This can be used to globally specify access keys for
example.
[Service] Adding the ability to include other service builder config
files from within XML and JSON files.
[Service] Changing the format of XML and JSON configs. Old format still
works too.
[Service] Moving XML service description includes to the end of
execution, so that includes are at the beginning of the parsed array.
[Service] Adding a Guzzle\Service\JsonLoader for loading JSON files that
have an { "includes": [] } array
[Common] Adding keySearch method to Collection
[Http] Moving POST curl option logic from EntityEnclosingRequest to the
curl factory method
Directly using the HTTP request object when creating curl handles in the
factory method
No longer adding a read callback when sending POSTs through
CURLOPT_POSTFIELDS
In an effort to mitigate random segfaults and bus errors, using a queue
for removing curl and close handles from a multi object so that they are
only removed when the multi handle has finished sending all requests.
Calling reset() each time a curl multi handle has finished all requests.
EntityEnclosingRequest::getPostFields() now returns a Collection object
Simplifying the EntityEnclosingRequest::getPostFiles method
Adding an array cache to header objects
Moving the header comparison DSL from the Tests namespace to
Guzzle\Http\Message\HeaderComparison, and adding tests.
Adding message, cookie, and url parser interfaces and default
implementations.
Using a parser registry to manage globally registered parsers. Removing parsing from Response and RequestFactory.
Renaming protocol_version to version
Changing the Guzzle\Http\Message\Response::setProtocol() method to accept a protocol and version in separate args.
Simplifying the chunked encoding handling in RequestFactory
Moving cookie parsing out of the cookie plugin and into Guzzle\Http\Parser\Cookie\CookieParser
Removing regexps from the cookie parser and simply using stripos
Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method.
Adding more logging to node.js test webserver
Adding pecl_http message parser.
Installing pecl when travis boots up
Moving Guzzle\Common\Guzzle::inject to Guzzle\Common\Collection::inject
Adding Guzzle\Version class to give version information
Adding Guzzle\Http\Utils class to provide getDefaultUserAgent() and
getHttpDate()
Adding Guzzle\Curl\CurlVersion to manage caching curl_version() data
Adding ResourceIteratorFactoryInterface with a class name resolution
implementation. Adding a resource iterator factory to
Guzzle\Service\Client and adding a getIterator method to make it easy to
retrieve iterators from the client.
methods for easy manipulation of resource iterator data options. Adding
setLimit() and setPageSize() methods to resource iterators. Fixing a
bug in the resource iterator that caused endless iteration if a result
is fetched with no resources returned from the sendRequest method.
Allowing cloned commands that have previously been sent to be sent again.
Redesigning the ResourceIterator class so that it accepts a command and iterates over the command until the sendRequest() method returns an empty array.
Adding the name of the parameter that received a type validation error to Inpector error messages
Returning a NullCacheAdapter from the CacheAdapterFactory if no cache.adapter is provided
Changing DescriptionBuilders to not be static method classes
Adding ServiceDescriptionFactory and making service descriptions cachable
[Http] cache.* parameters should be prefixed with 'params.' now.
Adding the ability to set arbitrary curl options that don't map to constants (disable_wire, progress, etc)
Added a check to the CurlMulti object that prevents sending a request when the curl multi resource has been destroyed. This could possibly happen when issuing requests from a destructor.
Adding the ability to disable type validation of configuration options
Adding a cache for all requests owned by a curl multi object
Creating the polling event external to the main CurlMulti loop
Hardening the CurlMulti class so that curl handles that are finished sending are removed from the multi handle. Adding validation test
[Common] BC: Simplifying Guzzle\Common\Collection so that it is more performant.
[Service] Adding the ability to disable validation on the Inpector class. Disabling validation on first instantiating commands so that defaults are added but nothing is check until attempting to execute a command.
Using class properties instead of a Collection for ApiCommand
BC: Using a custom validation system that allows a flyweight
implementation for much faster validation. No longer using Symfony2
Validation component.
Moving cURL transfer stderr logic from the CurlMulti class and on to the CurlHandle class
Adding a fix for 'too many open files' that will allow the proper exception to be thrown when this occurs by ensuring that the exception is autoloaded before you run into the issue.
Cleaning up some CurlMulti error checking and adding the ability to allow a request to continue to be sent even after a curl transfer error occurs.
Adding the option to pass in a callable function to the ExponentialBackoffPlugin that determines whether or not a request failed and should be retried. Adding a method to return a default array of failure codes and curl error numbers.
Adding the ability to retry specific curl handle transfer errors with the ExponentialBackoffPlugin
[Http] Error responses are now never written to the intended response stream of a request, but rather to a temporary stream. This helps when retrying failed requests so that the intended stream is not polluted with transient errors.
[Http] Adding the ability to retry failed requests with the exponential backoff plugin by checking both the status code and reason phrase.
[Service] Simplifying the loop in Guzzle\Service\Command\DynamicCommand
[Http] Using a factory method when creating bad response exceptions. Adding ClientErrorResponseException and ServerErrorResponseException.
[Http] Removing curl specific protocal version code from RequestInterace and pushing it to the curl namespace
[Http] Renaming parseUrlUtf8 to parseUrl and fixing a typo