Browse code

added appinfo/info.xml appinfo/signature.json CHANGELOG.txt lib/AppInfo/Application.php css/style.css providers/Plivo

DoubleBastionAdmin authored on 05/11/2025 13:35:09
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,1683 @@
1
+# Change Log
2
+
3
+Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.
4
+
5
+## 7.10.0 - 2025-08-23
6
+
7
+### Added
8
+
9
+- Support for PHP 8.5
10
+
11
+### Changed
12
+
13
+- Adjusted `guzzlehttp/promises` version constraint to `^2.3`
14
+- Adjusted `guzzlehttp/psr7` version constraint to `^2.8`
15
+
16
+
17
+## 7.9.3 - 2025-03-27
18
+
19
+### Changed
20
+
21
+- Remove explicit content-length header for GET requests
22
+- Improve compatibility with bad servers for boolean cookie values
23
+
24
+
25
+## 7.9.2 - 2024-07-24
26
+
27
+### Fixed
28
+
29
+- Adjusted handler selection to use cURL if its version is 7.21.2 or higher, rather than 7.34.0
30
+
31
+
32
+## 7.9.1 - 2024-07-19
33
+
34
+### Fixed
35
+
36
+- Fix TLS 1.3 check for HTTP/2 requests
37
+
38
+
39
+## 7.9.0 - 2024-07-18
40
+
41
+### Changed
42
+
43
+- Improve protocol version checks to provide feedback around unsupported protocols
44
+- Only select the cURL handler by default if 7.34.0 or higher is linked
45
+- Improved `CurlMultiHandler` to avoid busy wait if possible
46
+- Dropped support for EOL `guzzlehttp/psr7` v1
47
+- Improved URI user info redaction in errors
48
+
49
+## 7.8.2 - 2024-07-18
50
+
51
+### Added
52
+
53
+- Support for PHP 8.4
54
+
55
+
56
+## 7.8.1 - 2023-12-03
57
+
58
+### Changed
59
+
60
+- Updated links in docs to their canonical versions
61
+- Replaced `call_user_func*` with native calls
62
+
63
+
64
+## 7.8.0 - 2023-08-27
65
+
66
+### Added
67
+
68
+- Support for PHP 8.3
69
+- Added automatic closing of handles on `CurlFactory` object destruction
70
+
71
+
72
+## 7.7.1 - 2023-08-27
73
+
74
+### Changed
75
+
76
+- Remove the need for `AllowDynamicProperties` in `CurlMultiHandler`
77
+
78
+
79
+## 7.7.0 - 2023-05-21
80
+
81
+### Added
82
+
83
+- Support `guzzlehttp/promises` v2
84
+
85
+
86
+## 7.6.1 - 2023-05-15
87
+
88
+### Fixed
89
+
90
+- Fix `SetCookie::fromString` MaxAge deprecation warning and skip invalid MaxAge values
91
+
92
+
93
+## 7.6.0 - 2023-05-14
94
+
95
+### Added
96
+
97
+- Support for setting the minimum TLS version in a unified way
98
+- Apply on request the version set in options parameters
99
+
100
+
101
+## 7.5.2 - 2023-05-14
102
+
103
+### Fixed
104
+
105
+- Fixed set cookie constructor validation
106
+- Fixed handling of files with `'0'` body
107
+
108
+### Changed
109
+
110
+- Corrected docs and default connect timeout value to 300 seconds
111
+
112
+
113
+## 7.5.1 - 2023-04-17
114
+
115
+### Fixed
116
+
117
+- Fixed `NO_PROXY` settings so that setting the `proxy` option to `no` overrides the env variable
118
+
119
+### Changed
120
+
121
+- Adjusted `guzzlehttp/psr7` version constraint to `^1.9.1 || ^2.4.5`
122
+
123
+
124
+## 7.5.0 - 2022-08-28
125
+
126
+### Added
127
+
128
+- Support PHP 8.2
129
+- Add request to delay closure params
130
+
131
+
132
+## 7.4.5 - 2022-06-20
133
+
134
+### Fixed
135
+
136
+* Fix change in port should be considered a change in origin
137
+* Fix `CURLOPT_HTTPAUTH` option not cleared on change of origin
138
+
139
+
140
+## 7.4.4 - 2022-06-09
141
+
142
+### Fixed
143
+
144
+* Fix failure to strip Authorization header on HTTP downgrade
145
+* Fix failure to strip the Cookie header on change in host or HTTP downgrade
146
+
147
+
148
+## 7.4.3 - 2022-05-25
149
+
150
+### Fixed
151
+
152
+* Fix cross-domain cookie leakage
153
+
154
+
155
+## 7.4.2 - 2022-03-20
156
+
157
+### Fixed
158
+
159
+- Remove curl auth on cross-domain redirects to align with the Authorization HTTP header
160
+- Reject non-HTTP schemes in StreamHandler
161
+- Set a default ssl.peer_name context in StreamHandler to allow `force_ip_resolve`
162
+
163
+
164
+## 7.4.1 - 2021-12-06
165
+
166
+### Changed
167
+
168
+- Replaced implicit URI to string coercion [#2946](https://github.com/guzzle/guzzle/pull/2946)
169
+- Allow `symfony/deprecation-contracts` version 3 [#2961](https://github.com/guzzle/guzzle/pull/2961)
170
+
171
+### Fixed
172
+
173
+- Only close curl handle if it's done [#2950](https://github.com/guzzle/guzzle/pull/2950)
174
+
175
+
176
+## 7.4.0 - 2021-10-18
177
+
178
+### Added
179
+
180
+- Support PHP 8.1 [#2929](https://github.com/guzzle/guzzle/pull/2929), [#2939](https://github.com/guzzle/guzzle/pull/2939)
181
+- Support `psr/log` version 2 and 3 [#2943](https://github.com/guzzle/guzzle/pull/2943)
182
+
183
+### Fixed
184
+
185
+- Make sure we always call `restore_error_handler()` [#2915](https://github.com/guzzle/guzzle/pull/2915)
186
+- Fix progress parameter type compatibility between the cURL and stream handlers [#2936](https://github.com/guzzle/guzzle/pull/2936)
187
+- Throw `InvalidArgumentException` when an incorrect `headers` array is provided [#2916](https://github.com/guzzle/guzzle/pull/2916), [#2942](https://github.com/guzzle/guzzle/pull/2942)
188
+
189
+### Changed
190
+
191
+- Be more strict with types [#2914](https://github.com/guzzle/guzzle/pull/2914), [#2917](https://github.com/guzzle/guzzle/pull/2917), [#2919](https://github.com/guzzle/guzzle/pull/2919), [#2945](https://github.com/guzzle/guzzle/pull/2945)
192
+
193
+
194
+## 7.3.0 - 2021-03-23
195
+
196
+### Added
197
+
198
+- Support for DER and P12 certificates [#2413](https://github.com/guzzle/guzzle/pull/2413)
199
+- Support the cURL (http://) scheme for StreamHandler proxies [#2850](https://github.com/guzzle/guzzle/pull/2850)
200
+- Support for `guzzlehttp/psr7:^2.0` [#2878](https://github.com/guzzle/guzzle/pull/2878)
201
+
202
+### Fixed
203
+
204
+- Handle exceptions on invalid header consistently between PHP versions and handlers [#2872](https://github.com/guzzle/guzzle/pull/2872)
205
+
206
+
207
+## 7.2.0 - 2020-10-10
208
+
209
+### Added
210
+
211
+- Support for PHP 8 [#2712](https://github.com/guzzle/guzzle/pull/2712), [#2715](https://github.com/guzzle/guzzle/pull/2715), [#2789](https://github.com/guzzle/guzzle/pull/2789)
212
+- Support passing a body summarizer to the http errors middleware [#2795](https://github.com/guzzle/guzzle/pull/2795)
213
+
214
+### Fixed
215
+
216
+- Handle exceptions during response creation [#2591](https://github.com/guzzle/guzzle/pull/2591)
217
+- Fix CURLOPT_ENCODING not to be overwritten [#2595](https://github.com/guzzle/guzzle/pull/2595)
218
+- Make sure the Request always has a body object [#2804](https://github.com/guzzle/guzzle/pull/2804)
219
+
220
+### Changed
221
+
222
+- The `TooManyRedirectsException` has a response [#2660](https://github.com/guzzle/guzzle/pull/2660)
223
+- Avoid "functions" from dependencies [#2712](https://github.com/guzzle/guzzle/pull/2712)
224
+
225
+### Deprecated
226
+
227
+- Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786)
228
+
229
+
230
+## 7.1.1 - 2020-09-30
231
+
232
+### Fixed
233
+
234
+- Incorrect EOF detection for response body streams on Windows.
235
+
236
+### Changed
237
+
238
+- We dont connect curl `sink` on HEAD requests.
239
+- Removed some PHP 5 workarounds
240
+
241
+
242
+## 7.1.0 - 2020-09-22
243
+
244
+### Added
245
+
246
+- `GuzzleHttp\MessageFormatterInterface`
247
+
248
+### Fixed
249
+
250
+- Fixed issue that caused cookies with no value not to be stored.
251
+- On redirects, we allow all safe methods like GET, HEAD and OPTIONS.
252
+- Fixed logging on empty responses.
253
+- Make sure MessageFormatter::format returns string
254
+
255
+### Deprecated
256
+
257
+- All functions in `GuzzleHttp` has been deprecated. Use static methods on `Utils` instead.
258
+- `ClientInterface::getConfig()`
259
+- `Client::getConfig()`
260
+- `Client::__call()`
261
+- `Utils::defaultCaBundle()`
262
+- `CurlFactory::LOW_CURL_VERSION_NUMBER`
263
+
264
+
265
+## 7.0.1 - 2020-06-27
266
+
267
+* Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699)
268
+
269
+
270
+## 7.0.0 - 2020-06-27
271
+
272
+No changes since 7.0.0-rc1.
273
+
274
+
275
+## 7.0.0-rc1 - 2020-06-15
276
+
277
+### Changed
278
+
279
+* Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629)
280
+* Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675)
281
+
282
+
283
+## 7.0.0-beta2 - 2020-05-25
284
+
285
+### Added
286
+
287
+* Using `Utils` class instead of functions in the `GuzzleHttp` namespace. [#2546](https://github.com/guzzle/guzzle/pull/2546)
288
+* `ClientInterface::MAJOR_VERSION` [#2583](https://github.com/guzzle/guzzle/pull/2583)
289
+
290
+### Changed
291
+
292
+* Avoid the `getenv` function when unsafe [#2531](https://github.com/guzzle/guzzle/pull/2531)
293
+* Added real client methods [#2529](https://github.com/guzzle/guzzle/pull/2529)
294
+* Avoid functions due to global install conflicts [#2546](https://github.com/guzzle/guzzle/pull/2546)
295
+* Use Symfony intl-idn polyfill [#2550](https://github.com/guzzle/guzzle/pull/2550)
296
+* Adding methods for HTTP verbs like `Client::get()`, `Client::head()`, `Client::patch()` etc [#2529](https://github.com/guzzle/guzzle/pull/2529)
297
+* `ConnectException` extends `TransferException` [#2541](https://github.com/guzzle/guzzle/pull/2541)
298
+* Updated the default User Agent to "GuzzleHttp/7" [#2654](https://github.com/guzzle/guzzle/pull/2654)
299
+
300
+### Fixed
301
+
302
+* Various intl icu issues [#2626](https://github.com/guzzle/guzzle/pull/2626)
303
+
304
+### Removed
305
+
306
+* Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528)
307
+
308
+
309
+## 7.0.0-beta1 - 2019-12-30
310
+
311
+The diff might look very big but 95% of Guzzle users will be able to upgrade without modification.
312
+Please see [the upgrade document](UPGRADING.md) that describes all BC breaking changes.
313
+
314
+### Added
315
+
316
+* Implement PSR-18 and dropped PHP 5 support [#2421](https://github.com/guzzle/guzzle/pull/2421) [#2474](https://github.com/guzzle/guzzle/pull/2474)
317
+* PHP 7 types [#2442](https://github.com/guzzle/guzzle/pull/2442) [#2449](https://github.com/guzzle/guzzle/pull/2449) [#2466](https://github.com/guzzle/guzzle/pull/2466) [#2497](https://github.com/guzzle/guzzle/pull/2497) [#2499](https://github.com/guzzle/guzzle/pull/2499)
318
+* IDN support for redirects [2424](https://github.com/guzzle/guzzle/pull/2424)
319
+
320
+### Changed
321
+
322
+* Dont allow passing null as third argument to `BadResponseException::__construct()` [#2427](https://github.com/guzzle/guzzle/pull/2427)
323
+* Use SAPI constant instead of method call [#2450](https://github.com/guzzle/guzzle/pull/2450)
324
+* Use native function invocation [#2444](https://github.com/guzzle/guzzle/pull/2444)
325
+* Better defaults for PHP installations with old ICU lib [2454](https://github.com/guzzle/guzzle/pull/2454)
326
+* Added visibility to all constants [#2462](https://github.com/guzzle/guzzle/pull/2462)
327
+* Dont allow passing `null` as URI to `Client::request()` and `Client::requestAsync()` [#2461](https://github.com/guzzle/guzzle/pull/2461)
328
+* Widen the exception argument to throwable [#2495](https://github.com/guzzle/guzzle/pull/2495)
329
+
330
+### Fixed
331
+
332
+* Logging when Promise rejected with a string [#2311](https://github.com/guzzle/guzzle/pull/2311)
333
+
334
+### Removed
335
+
336
+* Class `SeekException` [#2162](https://github.com/guzzle/guzzle/pull/2162)
337
+* `RequestException::getResponseBodySummary()` [#2425](https://github.com/guzzle/guzzle/pull/2425)
338
+* `CookieJar::getCookieValue()` [#2433](https://github.com/guzzle/guzzle/pull/2433)
339
+* `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440)
340
+* Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464)
341
+
342
+
343
+## 6.5.2 - 2019-12-23
344
+
345
+* idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489)
346
+
347
+
348
+## 6.5.1 - 2019-12-21
349
+
350
+* Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454)
351
+* IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424)
352
+
353
+
354
+## 6.5.0 - 2019-12-07
355
+
356
+* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143)
357
+* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287)
358
+* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132)
359
+* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132)
360
+* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348)
361
+* Deprecated `ClientInterface::VERSION`
362
+
363
+
364
+## 6.4.1 - 2019-10-23
365
+
366
+* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that
367
+* Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar`
368
+
369
+
370
+## 6.4.0 - 2019-10-23
371
+
372
+* Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108)
373
+* Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [#2081](https://github.com/guzzle/guzzle/pull/2081)
374
+* Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [#2161](https://github.com/guzzle/guzzle/pull/2161)
375
+* Improvement: Added `GuzzleHttp\Exception\InvalidArgumentException` [#2163](https://github.com/guzzle/guzzle/pull/2163)
376
+* Improvement: Added `GuzzleHttp\_current_time()` to use `hrtime()` if that function exists. [#2242](https://github.com/guzzle/guzzle/pull/2242)
377
+* Improvement: Added curl's `appconnect_time` in `TransferStats` [#2284](https://github.com/guzzle/guzzle/pull/2284)
378
+* Improvement: Make GuzzleException extend Throwable wherever it's available [#2273](https://github.com/guzzle/guzzle/pull/2273)
379
+* Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335)
380
+* Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362)
381
+
382
+
383
+## 6.3.3 - 2018-04-22
384
+
385
+* Fix: Default headers when decode_content is specified
386
+
387
+
388
+## 6.3.2 - 2018-03-26
389
+
390
+* Fix: Release process
391
+
392
+
393
+## 6.3.1 - 2018-03-26
394
+
395
+* Bug fix: Parsing 0 epoch expiry times in cookies [#2014](https://github.com/guzzle/guzzle/pull/2014)
396
+* Improvement: Better ConnectException detection [#2012](https://github.com/guzzle/guzzle/pull/2012)
397
+* Bug fix: Malformed domain that contains a "/" [#1999](https://github.com/guzzle/guzzle/pull/1999)
398
+* Bug fix: Undefined offset when a cookie has no first key-value pair [#1998](https://github.com/guzzle/guzzle/pull/1998)
399
+* Improvement: Support PHPUnit 6 [#1953](https://github.com/guzzle/guzzle/pull/1953)
400
+* Bug fix: Support empty headers [#1915](https://github.com/guzzle/guzzle/pull/1915)
401
+* Bug fix: Ignore case during header modifications [#1916](https://github.com/guzzle/guzzle/pull/1916)
402
+
403
++ Minor code cleanups, documentation fixes and clarifications.
404
+
405
+
406
+## 6.3.0 - 2017-06-22
407
+
408
+* Feature: force IP resolution (ipv4 or ipv6) [#1608](https://github.com/guzzle/guzzle/pull/1608), [#1659](https://github.com/guzzle/guzzle/pull/1659)
409
+* Improvement: Don't include summary in exception message when body is empty [#1621](https://github.com/guzzle/guzzle/pull/1621)
410
+* Improvement: Handle `on_headers` option in MockHandler [#1580](https://github.com/guzzle/guzzle/pull/1580)
411
+* Improvement: Added SUSE Linux CA path [#1609](https://github.com/guzzle/guzzle/issues/1609)
412
+* Improvement: Use class reference for getting the name of the class instead of using hardcoded strings [#1641](https://github.com/guzzle/guzzle/pull/1641)
413
+* Feature: Added `read_timeout` option [#1611](https://github.com/guzzle/guzzle/pull/1611)
414
+* Bug fix: PHP 7.x fixes [#1685](https://github.com/guzzle/guzzle/pull/1685), [#1686](https://github.com/guzzle/guzzle/pull/1686), [#1811](https://github.com/guzzle/guzzle/pull/1811)
415
+* Deprecation: BadResponseException instantiation without a response [#1642](https://github.com/guzzle/guzzle/pull/1642)
416
+* Feature: Added NTLM auth [#1569](https://github.com/guzzle/guzzle/pull/1569)
417
+* Feature: Track redirect HTTP status codes [#1711](https://github.com/guzzle/guzzle/pull/1711)
418
+* Improvement: Check handler type during construction [#1745](https://github.com/guzzle/guzzle/pull/1745)
419
+* Improvement: Always include the Content-Length if there's a body [#1721](https://github.com/guzzle/guzzle/pull/1721)
420
+* Feature: Added convenience method to access a cookie by name [#1318](https://github.com/guzzle/guzzle/pull/1318)
421
+* Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684)
422
+* Improvement:  	Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827)
423
+
424
++ Minor code cleanups, documentation fixes and clarifications.
425
+
426
+
427
+## 6.2.3 - 2017-02-28
428
+
429
+* Fix deprecations with guzzle/psr7 version 1.4
430
+
431
+
432
+## 6.2.2 - 2016-10-08
433
+
434
+* Allow to pass nullable Response to delay callable
435
+* Only add scheme when host is present
436
+* Fix drain case where content-length is the literal string zero
437
+* Obfuscate in-URL credentials in exceptions
438
+
439
+
440
+## 6.2.1 - 2016-07-18
441
+
442
+* Address HTTP_PROXY security vulnerability, CVE-2016-5385:
443
+  https://httpoxy.org/
444
+* Fixing timeout bug with StreamHandler:
445
+  https://github.com/guzzle/guzzle/pull/1488
446
+* Only read up to `Content-Length` in PHP StreamHandler to avoid timeouts when
447
+  a server does not honor `Connection: close`.
448
+* Ignore URI fragment when sending requests.
449
+
450
+
451
+## 6.2.0 - 2016-03-21
452
+
453
+* Feature: added `GuzzleHttp\json_encode` and `GuzzleHttp\json_decode`.
454
+  https://github.com/guzzle/guzzle/pull/1389
455
+* Bug fix: Fix sleep calculation when waiting for delayed requests.
456
+  https://github.com/guzzle/guzzle/pull/1324
457
+* Feature: More flexible history containers.
458
+  https://github.com/guzzle/guzzle/pull/1373
459
+* Bug fix: defer sink stream opening in StreamHandler.
460
+  https://github.com/guzzle/guzzle/pull/1377
461
+* Bug fix: do not attempt to escape cookie values.
462
+  https://github.com/guzzle/guzzle/pull/1406
463
+* Feature: report original content encoding and length on decoded responses.
464
+  https://github.com/guzzle/guzzle/pull/1409
465
+* Bug fix: rewind seekable request bodies before dispatching to cURL.
466
+  https://github.com/guzzle/guzzle/pull/1422
467
+* Bug fix: provide an empty string to `http_build_query` for HHVM workaround.
468
+  https://github.com/guzzle/guzzle/pull/1367
469
+
470
+
471
+## 6.1.1 - 2015-11-22
472
+
473
+* Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler
474
+  https://github.com/guzzle/guzzle/commit/911bcbc8b434adce64e223a6d1d14e9a8f63e4e4
475
+* Feature: HandlerStack is now more generic.
476
+  https://github.com/guzzle/guzzle/commit/f2102941331cda544745eedd97fc8fd46e1ee33e
477
+* Bug fix: setting verify to false in the StreamHandler now disables peer
478
+  verification. https://github.com/guzzle/guzzle/issues/1256
479
+* Feature: Middleware now uses an exception factory, including more error
480
+  context. https://github.com/guzzle/guzzle/pull/1282
481
+* Feature: better support for disabled functions.
482
+  https://github.com/guzzle/guzzle/pull/1287
483
+* Bug fix: fixed regression where MockHandler was not using `sink`.
484
+  https://github.com/guzzle/guzzle/pull/1292
485
+
486
+
487
+## 6.1.0 - 2015-09-08
488
+
489
+* Feature: Added the `on_stats` request option to provide access to transfer
490
+  statistics for requests. https://github.com/guzzle/guzzle/pull/1202
491
+* Feature: Added the ability to persist session cookies in CookieJars.
492
+  https://github.com/guzzle/guzzle/pull/1195
493
+* Feature: Some compatibility updates for Google APP Engine
494
+  https://github.com/guzzle/guzzle/pull/1216
495
+* Feature: Added support for NO_PROXY to prevent the use of a proxy based on
496
+  a simple set of rules. https://github.com/guzzle/guzzle/pull/1197
497
+* Feature: Cookies can now contain square brackets.
498
+  https://github.com/guzzle/guzzle/pull/1237
499
+* Bug fix: Now correctly parsing `=` inside of quotes in Cookies.
500
+  https://github.com/guzzle/guzzle/pull/1232
501
+* Bug fix: Cusotm cURL options now correctly override curl options of the
502
+  same name. https://github.com/guzzle/guzzle/pull/1221
503
+* Bug fix: Content-Type header is now added when using an explicitly provided
504
+  multipart body. https://github.com/guzzle/guzzle/pull/1218
505
+* Bug fix: Now ignoring Set-Cookie headers that have no name.
506
+* Bug fix: Reason phrase is no longer cast to an int in some cases in the
507
+  cURL handler. https://github.com/guzzle/guzzle/pull/1187
508
+* Bug fix: Remove the Authorization header when redirecting if the Host
509
+  header changes. https://github.com/guzzle/guzzle/pull/1207
510
+* Bug fix: Cookie path matching fixes
511
+  https://github.com/guzzle/guzzle/issues/1129
512
+* Bug fix: Fixing the cURL `body_as_string` setting
513
+  https://github.com/guzzle/guzzle/pull/1201
514
+* Bug fix: quotes are no longer stripped when parsing cookies.
515
+  https://github.com/guzzle/guzzle/issues/1172
516
+* Bug fix: `form_params` and `query` now always uses the `&` separator.
517
+  https://github.com/guzzle/guzzle/pull/1163
518
+* Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set.
519
+  https://github.com/guzzle/guzzle/pull/1189
520
+
521
+
522
+## 6.0.2 - 2015-07-04
523
+
524
+* Fixed a memory leak in the curl handlers in which references to callbacks
525
+  were not being removed by `curl_reset`.
526
+* Cookies are now extracted properly before redirects.
527
+* Cookies now allow more character ranges.
528
+* Decoded Content-Encoding responses are now modified to correctly reflect
529
+  their state if the encoding was automatically removed by a handler. This
530
+  means that the `Content-Encoding` header may be removed an the
531
+  `Content-Length` modified to reflect the message size after removing the
532
+  encoding.
533
+* Added a more explicit error message when trying to use `form_params` and
534
+  `multipart` in the same request.
535
+* Several fixes for HHVM support.
536
+* Functions are now conditionally required using an additional level of
537
+  indirection to help with global Composer installations.
538
+
539
+
540
+## 6.0.1 - 2015-05-27
541
+
542
+* Fixed a bug with serializing the `query` request option where the `&`
543
+  separator was missing.
544
+* Added a better error message for when `body` is provided as an array. Please
545
+  use `form_params` or `multipart` instead.
546
+* Various doc fixes.
547
+
548
+
549
+## 6.0.0 - 2015-05-26
550
+
551
+* See the UPGRADING.md document for more information.
552
+* Added `multipart` and `form_params` request options.
553
+* Added `synchronous` request option.
554
+* Added the `on_headers` request option.
555
+* Fixed `expect` handling.
556
+* No longer adding default middlewares in the client ctor. These need to be
557
+  present on the provided handler in order to work.
558
+* Requests are no longer initiated when sending async requests with the
559
+  CurlMultiHandler. This prevents unexpected recursion from requests completing
560
+  while ticking the cURL loop.
561
+* Removed the semantics of setting `default` to `true`. This is no longer
562
+  required now that the cURL loop is not ticked for async requests.
563
+* Added request and response logging middleware.
564
+* No longer allowing self signed certificates when using the StreamHandler.
565
+* Ensuring that `sink` is valid if saving to a file.
566
+* Request exceptions now include a "handler context" which provides handler
567
+  specific contextual information.
568
+* Added `GuzzleHttp\RequestOptions` to allow request options to be applied
569
+  using constants.
570
+* `$maxHandles` has been removed from CurlMultiHandler.
571
+* `MultipartPostBody` is now part of the `guzzlehttp/psr7` package.
572
+
573
+
574
+## 5.3.0 - 2015-05-19
575
+
576
+* Mock now supports `save_to`
577
+* Marked `AbstractRequestEvent::getTransaction()` as public.
578
+* Fixed a bug in which multiple headers using different casing would overwrite
579
+  previous headers in the associative array.
580
+* Added `Utils::getDefaultHandler()`
581
+* Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated.
582
+* URL scheme is now always lowercased.
583
+
584
+
585
+## 6.0.0-beta.1
586
+
587
+* Requires PHP >= 5.5
588
+* Updated to use PSR-7
589
+  * Requires immutable messages, which basically means an event based system
590
+    owned by a request instance is no longer possible.
591
+  * Utilizing the [Guzzle PSR-7 package](https://github.com/guzzle/psr7).
592
+  * Removed the dependency on `guzzlehttp/streams`. These stream abstractions
593
+    are available in the `guzzlehttp/psr7` package under the `GuzzleHttp\Psr7`
594
+    namespace.
595
+* Added middleware and handler system
596
+  * Replaced the Guzzle event and subscriber system with a middleware system.
597
+  * No longer depends on RingPHP, but rather places the HTTP handlers directly
598
+    in Guzzle, operating on PSR-7 messages.
599
+  * Retry logic is now encapsulated in `GuzzleHttp\Middleware::retry`, which
600
+    means the `guzzlehttp/retry-subscriber` is now obsolete.
601
+  * Mocking responses is now handled using `GuzzleHttp\Handler\MockHandler`.
602
+* Asynchronous responses
603
+  * No longer supports the `future` request option to send an async request.
604
+    Instead, use one of the `*Async` methods of a client (e.g., `requestAsync`,
605
+    `getAsync`, etc.).
606
+  * Utilizing `GuzzleHttp\Promise` instead of React's promise library to avoid
607
+    recursion required by chaining and forwarding react promises. See
608
+    https://github.com/guzzle/promises
609
+  * Added `requestAsync` and `sendAsync` to send request asynchronously.
610
+  * Added magic methods for `getAsync()`, `postAsync()`, etc. to send requests
611
+    asynchronously.
612
+* Request options
613
+  * POST and form updates
614
+    * Added the `form_fields` and `form_files` request options.
615
+    * Removed the `GuzzleHttp\Post` namespace.
616
+    * The `body` request option no longer accepts an array for POST requests.
617
+  * The `exceptions` request option has been deprecated in favor of the
618
+    `http_errors` request options.
619
+  * The `save_to` request option has been deprecated in favor of `sink` request
620
+    option.
621
+* Clients no longer accept an array of URI template string and variables for
622
+  URI variables. You will need to expand URI templates before passing them
623
+  into a client constructor or request method.
624
+* Client methods `get()`, `post()`, `put()`, `patch()`, `options()`, etc. are
625
+  now magic methods that will send synchronous requests.
626
+* Replaced `Utils.php` with plain functions in `functions.php`.
627
+* Removed `GuzzleHttp\Collection`.
628
+* Removed `GuzzleHttp\BatchResults`. Batched pool results are now returned as
629
+  an array.
630
+* Removed `GuzzleHttp\Query`. Query string handling is now handled using an
631
+  associative array passed into the `query` request option. The query string
632
+  is serialized using PHP's `http_build_query`. If you need more control, you
633
+  can pass the query string in as a string.
634
+* `GuzzleHttp\QueryParser` has been replaced with the
635
+  `GuzzleHttp\Psr7\parse_query`.
636
+
637
+
638
+## 5.2.0 - 2015-01-27
639
+
640
+* Added `AppliesHeadersInterface` to make applying headers to a request based
641
+  on the body more generic and not specific to `PostBodyInterface`.
642
+* Reduced the number of stack frames needed to send requests.
643
+* Nested futures are now resolved in the client rather than the RequestFsm
644
+* Finishing state transitions is now handled in the RequestFsm rather than the
645
+  RingBridge.
646
+* Added a guard in the Pool class to not use recursion for request retries.
647
+
648
+
649
+## 5.1.0 - 2014-12-19
650
+
651
+* Pool class no longer uses recursion when a request is intercepted.
652
+* The size of a Pool can now be dynamically adjusted using a callback.
653
+  See https://github.com/guzzle/guzzle/pull/943.
654
+* Setting a request option to `null` when creating a request with a client will
655
+  ensure that the option is not set. This allows you to overwrite default
656
+  request options on a per-request basis.
657
+  See https://github.com/guzzle/guzzle/pull/937.
658
+* Added the ability to limit which protocols are allowed for redirects by
659
+  specifying a `protocols` array in the `allow_redirects` request option.
660
+* Nested futures due to retries are now resolved when waiting for synchronous
661
+  responses. See https://github.com/guzzle/guzzle/pull/947.
662
+* `"0"` is now an allowed URI path. See
663
+  https://github.com/guzzle/guzzle/pull/935.
664
+* `Query` no longer typehints on the `$query` argument in the constructor,
665
+  allowing for strings and arrays.
666
+* Exceptions thrown in the `end` event are now correctly wrapped with Guzzle
667
+  specific exceptions if necessary.
668
+
669
+
670
+## 5.0.3 - 2014-11-03
671
+
672
+This change updates query strings so that they are treated as un-encoded values
673
+by default where the value represents an un-encoded value to send over the
674
+wire. A Query object then encodes the value before sending over the wire. This
675
+means that even value query string values (e.g., ":") are url encoded. This
676
+makes the Query class match PHP's http_build_query function. However, if you
677
+want to send requests over the wire using valid query string characters that do
678
+not need to be encoded, then you can provide a string to Url::setQuery() and
679
+pass true as the second argument to specify that the query string is a raw
680
+string that should not be parsed or encoded (unless a call to getQuery() is
681
+subsequently made, forcing the query-string to be converted into a Query
682
+object).
683
+
684
+
685
+## 5.0.2 - 2014-10-30
686
+
687
+* Added a trailing `\r\n` to multipart/form-data payloads. See
688
+  https://github.com/guzzle/guzzle/pull/871
689
+* Added a `GuzzleHttp\Pool::send()` convenience method to match the docs.
690
+* Status codes are now returned as integers. See
691
+  https://github.com/guzzle/guzzle/issues/881
692
+* No longer overwriting an existing `application/x-www-form-urlencoded` header
693
+  when sending POST requests, allowing for customized headers. See
694
+  https://github.com/guzzle/guzzle/issues/877
695
+* Improved path URL serialization.
696
+
697
+  * No longer double percent-encoding characters in the path or query string if
698
+    they are already encoded.
699
+  * Now properly encoding the supplied path to a URL object, instead of only
700
+    encoding ' ' and '?'.
701
+  * Note: This has been changed in 5.0.3 to now encode query string values by
702
+    default unless the `rawString` argument is provided when setting the query
703
+    string on a URL: Now allowing many more characters to be present in the
704
+    query string without being percent encoded. See
705
+    https://datatracker.ietf.org/doc/html/rfc3986#appendix-A
706
+
707
+
708
+## 5.0.1 - 2014-10-16
709
+
710
+Bugfix release.
711
+
712
+* Fixed an issue where connection errors still returned response object in
713
+  error and end events event though the response is unusable. This has been
714
+  corrected so that a response is not returned in the `getResponse` method of
715
+  these events if the response did not complete. https://github.com/guzzle/guzzle/issues/867
716
+* Fixed an issue where transfer statistics were not being populated in the
717
+  RingBridge. https://github.com/guzzle/guzzle/issues/866
718
+
719
+
720
+## 5.0.0 - 2014-10-12
721
+
722
+Adding support for non-blocking responses and some minor API cleanup.
723
+
724
+### New Features
725
+
726
+* Added support for non-blocking responses based on `guzzlehttp/guzzle-ring`.
727
+* Added a public API for creating a default HTTP adapter.
728
+* Updated the redirect plugin to be non-blocking so that redirects are sent
729
+  concurrently. Other plugins like this can now be updated to be non-blocking.
730
+* Added a "progress" event so that you can get upload and download progress
731
+  events.
732
+* Added `GuzzleHttp\Pool` which implements FutureInterface and transfers
733
+  requests concurrently using a capped pool size as efficiently as possible.
734
+* Added `hasListeners()` to EmitterInterface.
735
+* Removed `GuzzleHttp\ClientInterface::sendAll` and marked
736
+  `GuzzleHttp\Client::sendAll` as deprecated (it's still there, just not the
737
+  recommended way).
738
+
739
+### Breaking changes
740
+
741
+The breaking changes in this release are relatively minor. The biggest thing to
742
+look out for is that request and response objects no longer implement fluent
743
+interfaces.
744
+
745
+* Removed the fluent interfaces (i.e., `return $this`) from requests,
746
+  responses, `GuzzleHttp\Collection`, `GuzzleHttp\Url`,
747
+  `GuzzleHttp\Query`, `GuzzleHttp\Post\PostBody`, and
748
+  `GuzzleHttp\Cookie\SetCookie`. This blog post provides a good outline of
749
+  why I did this: https://ocramius.github.io/blog/fluent-interfaces-are-evil/.
750
+  This also makes the Guzzle message interfaces compatible with the current
751
+  PSR-7 message proposal.
752
+* Removed "functions.php", so that Guzzle is truly PSR-4 compliant. Except
753
+  for the HTTP request functions from function.php, these functions are now
754
+  implemented in `GuzzleHttp\Utils` using camelCase. `GuzzleHttp\json_decode`
755
+  moved to `GuzzleHttp\Utils::jsonDecode`. `GuzzleHttp\get_path` moved to
756
+  `GuzzleHttp\Utils::getPath`. `GuzzleHttp\set_path` moved to
757
+  `GuzzleHttp\Utils::setPath`. `GuzzleHttp\batch` should now be
758
+  `GuzzleHttp\Pool::batch`, which returns an `objectStorage`. Using functions.php
759
+  caused problems for many users: they aren't PSR-4 compliant, require an
760
+  explicit include, and needed an if-guard to ensure that the functions are not
761
+  declared multiple times.
762
+* Rewrote adapter layer.
763
+    * Removing all classes from `GuzzleHttp\Adapter`, these are now
764
+      implemented as callables that are stored in `GuzzleHttp\Ring\Client`.
765
+    * Removed the concept of "parallel adapters". Sending requests serially or
766
+      concurrently is now handled using a single adapter.
767
+    * Moved `GuzzleHttp\Adapter\Transaction` to `GuzzleHttp\Transaction`. The
768
+      Transaction object now exposes the request, response, and client as public
769
+      properties. The getters and setters have been removed.
770
+* Removed the "headers" event. This event was only useful for changing the
771
+  body a response once the headers of the response were known. You can implement
772
+  a similar behavior in a number of ways. One example might be to use a
773
+  FnStream that has access to the transaction being sent. For example, when the
774
+  first byte is written, you could check if the response headers match your
775
+  expectations, and if so, change the actual stream body that is being
776
+  written to.
777
+* Removed the `asArray` parameter from
778
+  `GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header
779
+  value as an array, then use the newly added `getHeaderAsArray()` method of
780
+  `MessageInterface`. This change makes the Guzzle interfaces compatible with
781
+  the PSR-7 interfaces.
782
+* `GuzzleHttp\Message\MessageFactory` no longer allows subclasses to add
783
+  custom request options using double-dispatch (this was an implementation
784
+  detail). Instead, you should now provide an associative array to the
785
+  constructor which is a mapping of the request option name mapping to a
786
+  function that applies the option value to a request.
787
+* Removed the concept of "throwImmediately" from exceptions and error events.
788
+  This control mechanism was used to stop a transfer of concurrent requests
789
+  from completing. This can now be handled by throwing the exception or by
790
+  cancelling a pool of requests or each outstanding future request individually.
791
+* Updated to "GuzzleHttp\Streams" 3.0.
792
+    * `GuzzleHttp\Stream\StreamInterface::getContents()` no longer accepts a
793
+      `maxLen` parameter. This update makes the Guzzle streams project
794
+      compatible with the current PSR-7 proposal.
795
+    * `GuzzleHttp\Stream\Stream::__construct`,
796
+      `GuzzleHttp\Stream\Stream::factory`, and
797
+      `GuzzleHttp\Stream\Utils::create` no longer accept a size in the second
798
+      argument. They now accept an associative array of options, including the
799
+      "size" key and "metadata" key which can be used to provide custom metadata.
800
+
801
+
802
+## 4.2.2 - 2014-09-08
803
+
804
+* Fixed a memory leak in the CurlAdapter when reusing cURL handles.
805
+* No longer using `request_fulluri` in stream adapter proxies.
806
+* Relative redirects are now based on the last response, not the first response.
807
+
808
+## 4.2.1 - 2014-08-19
809
+
810
+* Ensuring that the StreamAdapter does not always add a Content-Type header
811
+* Adding automated github releases with a phar and zip
812
+
813
+## 4.2.0 - 2014-08-17
814
+
815
+* Now merging in default options using a case-insensitive comparison.
816
+  Closes https://github.com/guzzle/guzzle/issues/767
817
+* Added the ability to automatically decode `Content-Encoding` response bodies
818
+  using the `decode_content` request option. This is set to `true` by default
819
+  to decode the response body if it comes over the wire with a
820
+  `Content-Encoding`. Set this value to `false` to disable decoding the
821
+  response content, and pass a string to provide a request `Accept-Encoding`
822
+  header and turn on automatic response decoding. This feature now allows you
823
+  to pass an `Accept-Encoding` header in the headers of a request but still
824
+  disable automatic response decoding.
825
+  Closes https://github.com/guzzle/guzzle/issues/764
826
+* Added the ability to throw an exception immediately when transferring
827
+  requests in parallel. Closes https://github.com/guzzle/guzzle/issues/760
828
+* Updating guzzlehttp/streams dependency to ~2.1
829
+* No longer utilizing the now deprecated namespaced methods from the stream
830
+  package.
831
+
832
+## 4.1.8 - 2014-08-14
833
+
834
+* Fixed an issue in the CurlFactory that caused setting the `stream=false`
835
+  request option to throw an exception.
836
+  See: https://github.com/guzzle/guzzle/issues/769
837
+* TransactionIterator now calls rewind on the inner iterator.
838
+  See: https://github.com/guzzle/guzzle/pull/765
839
+* You can now set the `Content-Type` header to `multipart/form-data`
840
+  when creating POST requests to force multipart bodies.
841
+  See https://github.com/guzzle/guzzle/issues/768
842
+
843
+## 4.1.7 - 2014-08-07
844
+
845
+* Fixed an error in the HistoryPlugin that caused the same request and response
846
+  to be logged multiple times when an HTTP protocol error occurs.
847
+* Ensuring that cURL does not add a default Content-Type when no Content-Type
848
+  has been supplied by the user. This prevents the adapter layer from modifying
849
+  the request that is sent over the wire after any listeners may have already
850
+  put the request in a desired state (e.g., signed the request).
851
+* Throwing an exception when you attempt to send requests that have the
852
+  "stream" set to true in parallel using the MultiAdapter.
853
+* Only calling curl_multi_select when there are active cURL handles. This was
854
+  previously changed and caused performance problems on some systems due to PHP
855
+  always selecting until the maximum select timeout.
856
+* Fixed a bug where multipart/form-data POST fields were not correctly
857
+  aggregated (e.g., values with "&").
858
+
859
+## 4.1.6 - 2014-08-03
860
+
861
+* Added helper methods to make it easier to represent messages as strings,
862
+  including getting the start line and getting headers as a string.
863
+
864
+## 4.1.5 - 2014-08-02
865
+
866
+* Automatically retrying cURL "Connection died, retrying a fresh connect"
867
+  errors when possible.
868
+* cURL implementation cleanup
869
+* Allowing multiple event subscriber listeners to be registered per event by
870
+  passing an array of arrays of listener configuration.
871
+
872
+## 4.1.4 - 2014-07-22
873
+
874
+* Fixed a bug that caused multi-part POST requests with more than one field to
875
+  serialize incorrectly.
876
+* Paths can now be set to "0"
877
+* `ResponseInterface::xml` now accepts a `libxml_options` option and added a
878
+  missing default argument that was required when parsing XML response bodies.
879
+* A `save_to` stream is now created lazily, which means that files are not
880
+  created on disk unless a request succeeds.
881
+
882
+## 4.1.3 - 2014-07-15
883
+
884
+* Various fixes to multipart/form-data POST uploads
885
+* Wrapping function.php in an if-statement to ensure Guzzle can be used
886
+  globally and in a Composer install
887
+* Fixed an issue with generating and merging in events to an event array
888
+* POST headers are only applied before sending a request to allow you to change
889
+  the query aggregator used before uploading
890
+* Added much more robust query string parsing
891
+* Fixed various parsing and normalization issues with URLs
892
+* Fixing an issue where multi-valued headers were not being utilized correctly
893
+  in the StreamAdapter
894
+
895
+## 4.1.2 - 2014-06-18
896
+
897
+* Added support for sending payloads with GET requests
898
+
899
+## 4.1.1 - 2014-06-08
900
+
901
+* Fixed an issue related to using custom message factory options in subclasses
902
+* Fixed an issue with nested form fields in a multi-part POST
903
+* Fixed an issue with using the `json` request option for POST requests
904
+* Added `ToArrayInterface` to `GuzzleHttp\Cookie\CookieJar`
905
+
906
+## 4.1.0 - 2014-05-27
907
+
908
+* Added a `json` request option to easily serialize JSON payloads.
909
+* Added a `GuzzleHttp\json_decode()` wrapper to safely parse JSON.
910
+* Added `setPort()` and `getPort()` to `GuzzleHttp\Message\RequestInterface`.
911
+* Added the ability to provide an emitter to a client in the client constructor.
912
+* Added the ability to persist a cookie session using $_SESSION.
913
+* Added a trait that can be used to add event listeners to an iterator.
914
+* Removed request method constants from RequestInterface.
915
+* Fixed warning when invalid request start-lines are received.
916
+* Updated MessageFactory to work with custom request option methods.
917
+* Updated cacert bundle to latest build.
918
+
919
+4.0.2 (2014-04-16)
920
+------------------
921
+
922
+* Proxy requests using the StreamAdapter now properly use request_fulluri (#632)
923
+* Added the ability to set scalars as POST fields (#628)
924
+
925
+## 4.0.1 - 2014-04-04
926
+
927
+* The HTTP status code of a response is now set as the exception code of
928
+  RequestException objects.
929
+* 303 redirects will now correctly switch from POST to GET requests.
930
+* The default parallel adapter of a client now correctly uses the MultiAdapter.
931
+* HasDataTrait now initializes the internal data array as an empty array so
932
+  that the toArray() method always returns an array.
933
+
934
+## 4.0.0 - 2014-03-29
935
+
936
+* For information on changes and upgrading, see:
937
+  https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40
938
+* Added `GuzzleHttp\batch()` as a convenience function for sending requests in
939
+  parallel without needing to write asynchronous code.
940
+* Restructured how events are added to `GuzzleHttp\ClientInterface::sendAll()`.
941
+  You can now pass a callable or an array of associative arrays where each
942
+  associative array contains the "fn", "priority", and "once" keys.
943
+
944
+## 4.0.0.rc-2 - 2014-03-25
945
+
946
+* Removed `getConfig()` and `setConfig()` from clients to avoid confusion
947
+  around whether things like base_url, message_factory, etc. should be able to
948
+  be retrieved or modified.
949
+* Added `getDefaultOption()` and `setDefaultOption()` to ClientInterface
950
+* functions.php functions were renamed using snake_case to match PHP idioms
951
+* Added support for `HTTP_PROXY`, `HTTPS_PROXY`, and
952
+  `GUZZLE_CURL_SELECT_TIMEOUT` environment variables
953
+* Added the ability to specify custom `sendAll()` event priorities
954
+* Added the ability to specify custom stream context options to the stream
955
+  adapter.
956
+* Added a functions.php function for `get_path()` and `set_path()`
957
+* CurlAdapter and MultiAdapter now use a callable to generate curl resources
958
+* MockAdapter now properly reads a body and emits a `headers` event
959
+* Updated Url class to check if a scheme and host are set before adding ":"
960
+  and "//". This allows empty Url (e.g., "") to be serialized as "".
961
+* Parsing invalid XML no longer emits warnings
962
+* Curl classes now properly throw AdapterExceptions
963
+* Various performance optimizations
964
+* Streams are created with the faster `Stream\create()` function
965
+* Marked deprecation_proxy() as internal
966
+* Test server is now a collection of static methods on a class
967
+
968
+## 4.0.0-rc.1 - 2014-03-15
969
+
970
+* See https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40
971
+
972
+## 3.8.1 - 2014-01-28
973
+
974
+* Bug: Always using GET requests when redirecting from a 303 response
975
+* Bug: CURLOPT_SSL_VERIFYHOST is now correctly set to false when setting `$certificateAuthority` to false in
976
+  `Guzzle\Http\ClientInterface::setSslVerification()`
977
+* Bug: RedirectPlugin now uses strict RFC 3986 compliance when combining a base URL with a relative URL
978
+* Bug: The body of a request can now be set to `"0"`
979
+* Sending PHP stream requests no longer forces `HTTP/1.0`
980
+* Adding more information to ExceptionCollection exceptions so that users have more context, including a stack trace of
981
+  each sub-exception
982
+* Updated the `$ref` attribute in service descriptions to merge over any existing parameters of a schema (rather than
983
+  clobbering everything).
984
+* Merging URLs will now use the query string object from the relative URL (thus allowing custom query aggregators)
985
+* Query strings are now parsed in a way that they do no convert empty keys with no value to have a dangling `=`.
986
+  For example `foo&bar=baz` is now correctly parsed and recognized as `foo&bar=baz` rather than `foo=&bar=baz`.
987
+* Now properly escaping the regular expression delimiter when matching Cookie domains.
988
+* Network access is now disabled when loading XML documents
989
+
990
+## 3.8.0 - 2013-12-05
991
+
992
+* Added the ability to define a POST name for a file
993
+* JSON response parsing now properly walks additionalProperties
994
+* cURL error code 18 is now retried automatically in the BackoffPlugin
995
+* Fixed a cURL error when URLs contain fragments
996
+* Fixed an issue in the BackoffPlugin retry event where it was trying to access all exceptions as if they were
997
+  CurlExceptions
998
+* CURLOPT_PROGRESS function fix for PHP 5.5 (69fcc1e)
999
+* Added the ability for Guzzle to work with older versions of cURL that do not support `CURLOPT_TIMEOUT_MS`
1000
+* Fixed a bug that was encountered when parsing empty header parameters
1001
+* UriTemplate now has a `setRegex()` method to match the docs
1002
+* The `debug` request parameter now checks if it is truthy rather than if it exists
1003
+* Setting the `debug` request parameter to true shows verbose cURL output instead of using the LogPlugin
1004
+* Added the ability to combine URLs using strict RFC 3986 compliance
1005
+* Command objects can now return the validation errors encountered by the command
1006
+* Various fixes to cache revalidation (#437 and 29797e5)
1007
+* Various fixes to the AsyncPlugin
1008
+* Cleaned up build scripts
1009
+
1010
+## 3.7.4 - 2013-10-02
1011
+
1012
+* Bug fix: 0 is now an allowed value in a description parameter that has a default value (#430)
1013
+* Bug fix: SchemaFormatter now returns an integer when formatting to a Unix timestamp
1014
+  (see https://github.com/aws/aws-sdk-php/issues/147)
1015
+* Bug fix: Cleaned up and fixed URL dot segment removal to properly resolve internal dots
1016
+* Minimum PHP version is now properly specified as 5.3.3 (up from 5.3.2) (#420)
1017
+* Updated the bundled cacert.pem (#419)
1018
+* OauthPlugin now supports adding authentication to headers or query string (#425)
1019
+
1020
+## 3.7.3 - 2013-09-08
1021
+
1022
+* Added the ability to get the exception associated with a request/command when using `MultiTransferException` and
1023
+  `CommandTransferException`.
1024
+* Setting `additionalParameters` of a response to false is now honored when parsing responses with a service description
1025
+* Schemas are only injected into response models when explicitly configured.
1026
+* No longer guessing Content-Type based on the path of a request. Content-Type is now only guessed based on the path of
1027
+  an EntityBody.
1028
+* Bug fix: ChunkedIterator can now properly chunk a \Traversable as well as an \Iterator.
1029
+* Bug fix: FilterIterator now relies on `\Iterator` instead of `\Traversable`.
1030
+* Bug fix: Gracefully handling malformed responses in RequestMediator::writeResponseBody()
1031
+* Bug fix: Replaced call to canCache with canCacheRequest in the CallbackCanCacheStrategy of the CachePlugin
1032
+* Bug fix: Visiting XML attributes first before visiting XML children when serializing requests
1033
+* Bug fix: Properly parsing headers that contain commas contained in quotes
1034
+* Bug fix: mimetype guessing based on a filename is now case-insensitive
1035
+
1036
+## 3.7.2 - 2013-08-02
1037
+
1038
+* Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander
1039
+  See https://github.com/guzzle/guzzle/issues/371
1040
+* Bug fix: Cookie domains are now matched correctly according to RFC 6265
1041
+  See https://github.com/guzzle/guzzle/issues/377
1042
+* Bug fix: GET parameters are now used when calculating an OAuth signature
1043
+* Bug fix: Fixed an issue with cache revalidation where the If-None-Match header was being double quoted
1044
+* `Guzzle\Common\AbstractHasDispatcher::dispatch()` now returns the event that was dispatched
1045
+* `Guzzle\Http\QueryString::factory()` now guesses the most appropriate query aggregator to used based on the input.
1046
+  See https://github.com/guzzle/guzzle/issues/379
1047
+* Added a way to add custom domain objects to service description parsing using the `operation.parse_class` event. See
1048
+  https://github.com/guzzle/guzzle/pull/380
1049
+* cURL multi cleanup and optimizations
1050
+
1051
+## 3.7.1 - 2013-07-05
1052
+
1053
+* Bug fix: Setting default options on a client now works
1054
+* Bug fix: Setting options on HEAD requests now works. See #352
1055
+* Bug fix: Moving stream factory before send event to before building the stream. See #353
1056
+* Bug fix: Cookies no longer match on IP addresses per RFC 6265
1057
+* Bug fix: Correctly parsing header parameters that are in `<>` and quotes
1058
+* Added `cert` and `ssl_key` as request options
1059
+* `Host` header can now diverge from the host part of a URL if the header is set manually
1060
+* `Guzzle\Service\Command\LocationVisitor\Request\XmlVisitor` was rewritten to change from using SimpleXML to XMLWriter
1061
+* OAuth parameters are only added via the plugin if they aren't already set
1062
+* Exceptions are now thrown when a URL cannot be parsed
1063
+* Returning `false` if `Guzzle\Http\EntityBody::getContentMd5()` fails
1064
+* Not setting a `Content-MD5` on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin
1065
+
1066
+## 3.7.0 - 2013-06-10
1067
+
1068
+* See UPGRADING.md for more information on how to upgrade.
1069
+* Requests now support the ability to specify an array of $options when creating a request to more easily modify a
1070
+  request. You can pass a 'request.options' configuration setting to a client to apply default request options to
1071
+  every request created by a client (e.g. default query string variables, headers, curl options, etc.).
1072
+* Added a static facade class that allows you to use Guzzle with static methods and mount the class to `\Guzzle`.
1073
+  See `Guzzle\Http\StaticClient::mount`.
1074
+* Added `command.request_options` to `Guzzle\Service\Command\AbstractCommand` to pass request options to requests
1075
+      created by a command (e.g. custom headers, query string variables, timeout settings, etc.).
1076
+* Stream size in `Guzzle\Stream\PhpStreamRequestFactory` will now be set if Content-Length is returned in the
1077
+  headers of a response
1078
+* Added `Guzzle\Common\Collection::setPath($path, $value)` to set a value into an array using a nested key
1079
+  (e.g. `$collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];`)
1080
+* ServiceBuilders now support storing and retrieving arbitrary data
1081
+* CachePlugin can now purge all resources for a given URI
1082
+* CachePlugin can automatically purge matching cached items when a non-idempotent request is sent to a resource
1083
+* CachePlugin now uses the Vary header to determine if a resource is a cache hit
1084
+* `Guzzle\Http\Message\Response` now implements `\Serializable`
1085
+* Added `Guzzle\Cache\CacheAdapterFactory::fromCache()` to more easily create cache adapters
1086
+* `Guzzle\Service\ClientInterface::execute()` now accepts an array, single command, or Traversable
1087
+* Fixed a bug in `Guzzle\Http\Message\Header\Link::addLink()`
1088
+* Better handling of calculating the size of a stream in `Guzzle\Stream\Stream` using fstat() and caching the size
1089
+* `Guzzle\Common\Exception\ExceptionCollection` now creates a more readable exception message
1090
+* Fixing BC break: Added back the MonologLogAdapter implementation rather than extending from PsrLog so that older
1091
+  Symfony users can still use the old version of Monolog.
1092
+* Fixing BC break: Added the implementation back in for `Guzzle\Http\Message\AbstractMessage::getTokenizedHeader()`.
1093
+  Now triggering an E_USER_DEPRECATED warning when used. Use `$message->getHeader()->parseParams()`.
1094
+* Several performance improvements to `Guzzle\Common\Collection`
1095
+* Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`:
1096
+  createRequest, head, delete, put, patch, post, options, prepareRequest
1097
+* Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()`
1098
+* Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface`
1099
+* Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to
1100
+  `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a
1101
+  resource, string, or EntityBody into the $options parameter to specify the download location of the response.
1102
+* Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a
1103
+  default `array()`
1104
+* Added `Guzzle\Stream\StreamInterface::isRepeatable`
1105
+* Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use
1106
+  $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or
1107
+  $client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`.
1108
+* Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers')`.
1109
+* Removed `Guzzle\Http\ClientInterface::expandTemplate()`
1110
+* Removed `Guzzle\Http\ClientInterface::setRequestFactory()`
1111
+* Removed `Guzzle\Http\ClientInterface::getCurlMulti()`
1112
+* Removed `Guzzle\Http\Message\RequestInterface::canCache`
1113
+* Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`
1114
+* Removed `Guzzle\Http\Message\RequestInterface::isRedirect`
1115
+* Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods.
1116
+* You can now enable E_USER_DEPRECATED warnings to see if you are using a deprecated method by setting
1117
+  `Guzzle\Common\Version::$emitWarnings` to true.
1118
+* Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use
1119
+      `$request->getResponseBody()->isRepeatable()` instead.
1120
+* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
1121
+  `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
1122
+* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
1123
+  `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
1124
+* Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.
1125
+* Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.
1126
+* Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated
1127
+* Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand.
1128
+  These will work through Guzzle 4.0
1129
+* Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use [request.options][params].
1130
+* Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client.
1131
+* Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use $client->getConfig()->getPath('request.options/headers')`.
1132
+* Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`.
1133
+* Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.
1134
+* Marked `Guzzle\Common\Collection::inject()` as deprecated.
1135
+* Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');`
1136
+* CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a
1137
+  CacheStorageInterface. These two objects and interface will be removed in a future version.
1138
+* Always setting X-cache headers on cached responses
1139
+* Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin
1140
+* `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface
1141
+  $request, Response $response);`
1142
+* `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`
1143
+* `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`
1144
+* Added `CacheStorageInterface::purge($url)`
1145
+* `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin
1146
+  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,
1147
+  CanCacheStrategyInterface $canCache = null)`
1148
+* Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`
1149
+
1150
+## 3.6.0 - 2013-05-29
1151
+
1152
+* ServiceDescription now implements ToArrayInterface
1153
+* Added command.hidden_params to blacklist certain headers from being treated as additionalParameters
1154
+* Guzzle can now correctly parse incomplete URLs
1155
+* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.
1156
+* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution
1157
+* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().
1158
+* Specific header implementations can be created for complex headers. When a message creates a header, it uses a
1159
+  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and
1160
+  CacheControl header implementation.
1161
+* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate
1162
+* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti()
1163
+* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in
1164
+  Guzzle\Http\Curl\RequestMediator
1165
+* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.
1166
+* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface
1167
+* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders()
1168
+* Removed Guzzle\Parser\ParserRegister::get(). Use getParser()
1169
+* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser().
1170
+* All response header helper functions return a string rather than mixing Header objects and strings inconsistently
1171
+* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle
1172
+  directly via interfaces
1173
+* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist
1174
+  but are a no-op until removed.
1175
+* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a
1176
+  `Guzzle\Service\Command\ArrayCommandInterface`.
1177
+* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response
1178
+  on a request while the request is still being transferred
1179
+* The ability to case-insensitively search for header values
1180
+* Guzzle\Http\Message\Header::hasExactHeader
1181
+* Guzzle\Http\Message\Header::raw. Use getAll()
1182
+* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object
1183
+  instead.
1184
+* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess
1185
+* Added the ability to cast Model objects to a string to view debug information.
1186
+
1187
+## 3.5.0 - 2013-05-13
1188
+
1189
+* Bug: Fixed a regression so that request responses are parsed only once per oncomplete event rather than multiple times
1190
+* Bug: Better cleanup of one-time events across the board (when an event is meant to fire once, it will now remove
1191
+  itself from the EventDispatcher)
1192
+* Bug: `Guzzle\Log\MessageFormatter` now properly writes "total_time" and "connect_time" values
1193
+* Bug: Cloning an EntityEnclosingRequest now clones the EntityBody too
1194
+* Bug: Fixed an undefined index error when parsing nested JSON responses with a sentAs parameter that reference a
1195
+  non-existent key
1196
+* Bug: All __call() method arguments are now required (helps with mocking frameworks)
1197
+* Deprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference
1198
+  to help with refcount based garbage collection of resources created by sending a request
1199
+* Deprecating ZF1 cache and log adapters. These will be removed in the next major version.
1200
+* Deprecating `Response::getPreviousResponse()` (method signature still exists, but it's deprecated). Use the
1201
+  HistoryPlugin for a history.
1202
+* Added a `responseBody` alias for the `response_body` location
1203
+* Refactored internals to no longer rely on Response::getRequest()
1204
+* HistoryPlugin can now be cast to a string
1205
+* HistoryPlugin now logs transactions rather than requests and responses to more accurately keep track of the requests
1206
+  and responses that are sent over the wire
1207
+* Added `getEffectiveUrl()` and `getRedirectCount()` to Response objects
1208
+
1209
+## 3.4.3 - 2013-04-30
1210
+
1211
+* Bug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response
1212
+* Added a check to re-extract the temp cacert bundle from the phar before sending each request
1213
+
1214
+## 3.4.2 - 2013-04-29
1215
+
1216
+* Bug fix: Stream objects now work correctly with "a" and "a+" modes
1217
+* Bug fix: Removing `Transfer-Encoding: chunked` header when a Content-Length is present
1218
+* Bug fix: AsyncPlugin no longer forces HEAD requests
1219
+* Bug fix: DateTime timezones are now properly handled when using the service description schema formatter
1220
+* Bug fix: CachePlugin now properly handles stale-if-error directives when a request to the origin server fails
1221
+* Setting a response on a request will write to the custom request body from the response body if one is specified
1222
+* LogPlugin now writes to php://output when STDERR is undefined
1223
+* Added the ability to set multiple POST files for the same key in a single call
1224
+* application/x-www-form-urlencoded POSTs now use the utf-8 charset by default
1225
+* Added the ability to queue CurlExceptions to the MockPlugin
1226
+* Cleaned up how manual responses are queued on requests (removed "queued_response" and now using request.before_send)
1227
+* Configuration loading now allows remote files
1228
+
1229
+## 3.4.1 - 2013-04-16
1230
+
1231
+* Large refactoring to how CurlMulti handles work. There is now a proxy that sits in front of a pool of CurlMulti
1232
+  handles. This greatly simplifies the implementation, fixes a couple bugs, and provides a small performance boost.
1233
+* Exceptions are now properly grouped when sending requests in parallel
1234
+* Redirects are now properly aggregated when a multi transaction fails
1235
+* Redirects now set the response on the original object even in the event of a failure
1236
+* Bug fix: Model names are now properly set even when using $refs
1237
+* Added support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax
1238
+* Added support for oauth_callback in OAuth signatures
1239
+* Added support for oauth_verifier in OAuth signatures
1240
+* Added support to attempt to retrieve a command first literally, then ucfirst, the with inflection
1241
+
1242
+## 3.4.0 - 2013-04-11
1243
+
1244
+* Bug fix: URLs are now resolved correctly based on https://datatracker.ietf.org/doc/html/rfc3986#section-5.2. #289
1245
+* Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289
1246
+* Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263
1247
+* Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264.
1248
+* Bug fix: Added `number` type to service descriptions.
1249
+* Bug fix: empty parameters are removed from an OAuth signature
1250
+* Bug fix: Revalidating a cache entry prefers the Last-Modified over the Date header
1251
+* Bug fix: Fixed "array to string" error when validating a union of types in a service description
1252
+* Bug fix: Removed code that attempted to determine the size of a stream when data is written to the stream
1253
+* Bug fix: Not including an `oauth_token` if the value is null in the OauthPlugin.
1254
+* Bug fix: Now correctly aggregating successful requests and failed requests in CurlMulti when a redirect occurs.
1255
+* The new default CURLOPT_TIMEOUT setting has been increased to 150 seconds so that Guzzle works on poor connections.
1256
+* Added a feature to EntityEnclosingRequest::setBody() that will automatically set the Content-Type of the request if
1257
+  the Content-Type can be determined based on the entity body or the path of the request.
1258
+* Added the ability to overwrite configuration settings in a client when grabbing a throwaway client from a builder.
1259
+* Added support for a PSR-3 LogAdapter.
1260
+* Added a `command.after_prepare` event
1261
+* Added `oauth_callback` parameter to the OauthPlugin
1262
+* Added the ability to create a custom stream class when using a stream factory
1263
+* Added a CachingEntityBody decorator
1264
+* Added support for `additionalParameters` in service descriptions to define how custom parameters are serialized.
1265
+* The bundled SSL certificate is now provided in the phar file and extracted when running Guzzle from a phar.
1266
+* You can now send any EntityEnclosingRequest with POST fields or POST files and cURL will handle creating bodies
1267
+* POST requests using a custom entity body are now treated exactly like PUT requests but with a custom cURL method. This
1268
+  means that the redirect behavior of POST requests with custom bodies will not be the same as POST requests that use
1269
+  POST fields or files (the latter is only used when emulating a form POST in the browser).
1270
+* Lots of cleanup to CurlHandle::factory and RequestFactory::createRequest
1271
+
1272
+## 3.3.1 - 2013-03-10
1273
+
1274
+* Added the ability to create PHP streaming responses from HTTP requests
1275
+* Bug fix: Running any filters when parsing response headers with service descriptions
1276
+* Bug fix: OauthPlugin fixes to allow for multi-dimensional array signing, and sorting parameters before signing
1277
+* Bug fix: Removed the adding of default empty arrays and false Booleans to responses in order to be consistent across
1278
+  response location visitors.
1279
+* Bug fix: Removed the possibility of creating configuration files with circular dependencies
1280
+* RequestFactory::create() now uses the key of a POST file when setting the POST file name
1281
+* Added xmlAllowEmpty to serialize an XML body even if no XML specific parameters are set
1282
+
1283
+## 3.3.0 - 2013-03-03
1284
+
1285
+* A large number of performance optimizations have been made
1286
+* Bug fix: Added 'wb' as a valid write mode for streams
1287
+* Bug fix: `Guzzle\Http\Message\Response::json()` now allows scalar values to be returned
1288
+* Bug fix: Fixed bug in `Guzzle\Http\Message\Response` where wrapping quotes were stripped from `getEtag()`
1289
+* BC: Removed `Guzzle\Http\Utils` class
1290
+* BC: Setting a service description on a client will no longer modify the client's command factories.
1291
+* BC: Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using
1292
+  the 'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'
1293
+* BC: `Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getSteamType()` are no longer converted to
1294
+  lowercase
1295
+* Operation parameter objects are now lazy loaded internally
1296
+* Added ErrorResponsePlugin that can throw errors for responses defined in service description operations' errorResponses
1297
+* Added support for instantiating responseType=class responseClass classes. Classes must implement
1298
+  `Guzzle\Service\Command\ResponseClassInterface`
1299
+* Added support for additionalProperties for top-level parameters in responseType=model responseClasses. These
1300
+  additional properties also support locations and can be used to parse JSON responses where the outermost part of the
1301
+  JSON is an array
1302
+* Added support for nested renaming of JSON models (rename sentAs to name)
1303
+* CachePlugin
1304
+    * Added support for stale-if-error so that the CachePlugin can now serve stale content from the cache on error
1305
+    * Debug headers can now added to cached response in the CachePlugin
1306
+
1307
+## 3.2.0 - 2013-02-14
1308
+
1309
+* CurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients.
1310
+* URLs with no path no longer contain a "/" by default
1311
+* Guzzle\Http\QueryString does no longer manages the leading "?". This is now handled in Guzzle\Http\Url.
1312
+* BadResponseException no longer includes the full request and response message
1313
+* Adding setData() to Guzzle\Service\Description\ServiceDescriptionInterface
1314
+* Adding getResponseBody() to Guzzle\Http\Message\RequestInterface
1315
+* Various updates to classes to use ServiceDescriptionInterface type hints rather than ServiceDescription
1316
+* Header values can now be normalized into distinct values when multiple headers are combined with a comma separated list
1317
+* xmlEncoding can now be customized for the XML declaration of a XML service description operation
1318
+* Guzzle\Http\QueryString now uses Guzzle\Http\QueryAggregator\QueryAggregatorInterface objects to add custom value
1319
+  aggregation and no longer uses callbacks
1320
+* The URL encoding implementation of Guzzle\Http\QueryString can now be customized
1321
+* Bug fix: Filters were not always invoked for array service description parameters
1322
+* Bug fix: Redirects now use a target response body rather than a temporary response body
1323
+* Bug fix: The default exponential backoff BackoffPlugin was not giving when the request threshold was exceeded
1324
+* Bug fix: Guzzle now takes the first found value when grabbing Cache-Control directives
1325
+
1326
+## 3.1.2 - 2013-01-27
1327
+
1328
+* Refactored how operation responses are parsed. Visitors now include a before() method responsible for parsing the
1329
+  response body. For example, the XmlVisitor now parses the XML response into an array in the before() method.
1330
+* Fixed an issue where cURL would not automatically decompress responses when the Accept-Encoding header was sent
1331
+* CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444)
1332
+* Fixed a bug where redirect responses were not chained correctly using getPreviousResponse()
1333
+* Setting default headers on a client after setting the user-agent will not erase the user-agent setting
1334
+
1335
+## 3.1.1 - 2013-01-20
1336
+
1337
+* Adding wildcard support to Guzzle\Common\Collection::getPath()
1338
+* Adding alias support to ServiceBuilder configs
1339
+* Adding Guzzle\Service\Resource\CompositeResourceIteratorFactory and cleaning up factory interface
1340
+
1341
+## 3.1.0 - 2013-01-12
1342
+
1343
+* BC: CurlException now extends from RequestException rather than BadResponseException
1344
+* BC: Renamed Guzzle\Plugin\Cache\CanCacheStrategyInterface::canCache() to canCacheRequest() and added CanCacheResponse()
1345
+* Added getData to ServiceDescriptionInterface
1346
+* Added context array to RequestInterface::setState()
1347
+* Bug: Removing hard dependency on the BackoffPlugin from Guzzle\Http
1348
+* Bug: Adding required content-type when JSON request visitor adds JSON to a command
1349
+* Bug: Fixing the serialization of a service description with custom data
1350
+* Made it easier to deal with exceptions thrown when transferring commands or requests in parallel by providing
1351
+  an array of successful and failed responses
1352
+* Moved getPath from Guzzle\Service\Resource\Model to Guzzle\Common\Collection
1353
+* Added Guzzle\Http\IoEmittingEntityBody
1354
+* Moved command filtration from validators to location visitors
1355
+* Added `extends` attributes to service description parameters
1356
+* Added getModels to ServiceDescriptionInterface
1357
+
1358
+## 3.0.7 - 2012-12-19
1359
+
1360
+* Fixing phar detection when forcing a cacert to system if null or true
1361
+* Allowing filename to be passed to `Guzzle\Http\Message\Request::setResponseBody()`
1362
+* Cleaning up `Guzzle\Common\Collection::inject` method
1363
+* Adding a response_body location to service descriptions
1364
+
1365
+## 3.0.6 - 2012-12-09
1366
+
1367
+* CurlMulti performance improvements
1368
+* Adding setErrorResponses() to Operation
1369
+* composer.json tweaks
1370
+
1371
+## 3.0.5 - 2012-11-18
1372
+
1373
+* Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin
1374
+* Bug: Response body can now be a string containing "0"
1375
+* Bug: Using Guzzle inside of a phar uses system by default but now allows for a custom cacert
1376
+* Bug: QueryString::fromString now properly parses query string parameters that contain equal signs
1377
+* Added support for XML attributes in service description responses
1378
+* DefaultRequestSerializer now supports array URI parameter values for URI template expansion
1379
+* Added better mimetype guessing to requests and post files
1380
+
1381
+## 3.0.4 - 2012-11-11
1382
+
1383
+* Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value
1384
+* Bug: Cookies can now be added that have a name, domain, or value set to "0"
1385
+* Bug: Using the system cacert bundle when using the Phar
1386
+* Added json and xml methods to Response to make it easier to parse JSON and XML response data into data structures
1387
+* Enhanced cookie jar de-duplication
1388
+* Added the ability to enable strict cookie jars that throw exceptions when invalid cookies are added
1389
+* Added setStream to StreamInterface to actually make it possible to implement custom rewind behavior for entity bodies
1390
+* Added the ability to create any sort of hash for a stream rather than just an MD5 hash
1391
+
1392
+## 3.0.3 - 2012-11-04
1393
+
1394
+* Implementing redirects in PHP rather than cURL
1395
+* Added PECL URI template extension and using as default parser if available
1396
+* Bug: Fixed Content-Length parsing of Response factory
1397
+* Adding rewind() method to entity bodies and streams. Allows for custom rewinding of non-repeatable streams.
1398
+* Adding ToArrayInterface throughout library
1399
+* Fixing OauthPlugin to create unique nonce values per request
1400
+
1401
+## 3.0.2 - 2012-10-25
1402
+
1403
+* Magic methods are enabled by default on clients
1404
+* Magic methods return the result of a command
1405
+* Service clients no longer require a base_url option in the factory
1406
+* Bug: Fixed an issue with URI templates where null template variables were being expanded
1407
+
1408
+## 3.0.1 - 2012-10-22
1409
+
1410
+* Models can now be used like regular collection objects by calling filter, map, etc.
1411
+* Models no longer require a Parameter structure or initial data in the constructor
1412
+* Added a custom AppendIterator to get around a PHP bug with the `\AppendIterator`
1413
+
1414
+## 3.0.0 - 2012-10-15
1415
+
1416
+* Rewrote service description format to be based on Swagger
1417
+    * Now based on JSON schema
1418
+    * Added nested input structures and nested response models
1419
+    * Support for JSON and XML input and output models
1420
+    * Renamed `commands` to `operations`
1421
+    * Removed dot class notation
1422
+    * Removed custom types
1423
+* Broke the project into smaller top-level namespaces to be more component friendly
1424
+* Removed support for XML configs and descriptions. Use arrays or JSON files.
1425
+* Removed the Validation component and Inspector
1426
+* Moved all cookie code to Guzzle\Plugin\Cookie
1427
+* Magic methods on a Guzzle\Service\Client now return the command un-executed.
1428
+* Calling getResult() or getResponse() on a command will lazily execute the command if needed.
1429
+* Now shipping with cURL's CA certs and using it by default
1430
+* Added previousResponse() method to response objects
1431
+* No longer sending Accept and Accept-Encoding headers on every request
1432
+* Only sending an Expect header by default when a payload is greater than 1MB
1433
+* Added/moved client options:
1434
+    * curl.blacklist to curl.option.blacklist
1435
+    * Added ssl.certificate_authority
1436
+* Added a Guzzle\Iterator component
1437
+* Moved plugins from Guzzle\Http\Plugin to Guzzle\Plugin
1438
+* Added a more robust backoff retry strategy (replaced the ExponentialBackoffPlugin)
1439
+* Added a more robust caching plugin
1440
+* Added setBody to response objects
1441
+* Updating LogPlugin to use a more flexible MessageFormatter
1442
+* Added a completely revamped build process
1443
+* Cleaning up Collection class and removing default values from the get method
1444
+* Fixed ZF2 cache adapters
1445
+
1446
+## 2.8.8 - 2012-10-15
1447
+
1448
+* Bug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did
1449
+
1450
+## 2.8.7 - 2012-09-30
1451
+
1452
+* Bug: Fixed config file aliases for JSON includes
1453
+* Bug: Fixed cookie bug on a request object by using CookieParser to parse cookies on requests
1454
+* Bug: Removing the path to a file when sending a Content-Disposition header on a POST upload
1455
+* Bug: Hardening request and response parsing to account for missing parts
1456
+* Bug: Fixed PEAR packaging
1457
+* Bug: Fixed Request::getInfo
1458
+* Bug: Fixed cases where CURLM_CALL_MULTI_PERFORM return codes were causing curl transactions to fail
1459
+* Adding the ability for the namespace Iterator factory to look in multiple directories
1460
+* Added more getters/setters/removers from service descriptions
1461
+* Added the ability to remove POST fields from OAuth signatures
1462
+* OAuth plugin now supports 2-legged OAuth
1463
+
1464
+## 2.8.6 - 2012-09-05
1465
+
1466
+* Added the ability to modify and build service descriptions
1467
+* Added the use of visitors to apply parameters to locations in service descriptions using the dynamic command
1468
+* Added a `json` parameter location
1469
+* Now allowing dot notation for classes in the CacheAdapterFactory
1470
+* Using the union of two arrays rather than an array_merge when extending service builder services and service params
1471
+* Ensuring that a service is a string before doing strpos() checks on it when substituting services for references
1472
+  in service builder config files.
1473
+* Services defined in two different config files that include one another will by default replace the previously
1474
+  defined service, but you can now create services that extend themselves and merge their settings over the previous
1475
+* The JsonLoader now supports aliasing filenames with different filenames. This allows you to alias something like
1476
+  '_default' with a default JSON configuration file.
1477
+
1478
+## 2.8.5 - 2012-08-29
1479
+
1480
+* Bug: Suppressed empty arrays from URI templates
1481
+* Bug: Added the missing $options argument from ServiceDescription::factory to enable caching
1482
+* Added support for HTTP responses that do not contain a reason phrase in the start-line
1483
+* AbstractCommand commands are now invokable
1484
+* Added a way to get the data used when signing an Oauth request before a request is sent
1485
+
1486
+## 2.8.4 - 2012-08-15
1487
+
1488
+* Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin
1489
+* Added the ability to transfer entity bodies as a string rather than streamed. This gets around curl error 65. Set `body_as_string` in a request's curl options to enable.
1490
+* Added a StreamInterface, EntityBodyInterface, and added ftell() to Guzzle\Common\Stream
1491
+* Added an AbstractEntityBodyDecorator and a ReadLimitEntityBody decorator to transfer only a subset of a decorated stream
1492
+* Stream and EntityBody objects will now return the file position to the previous position after a read required operation (e.g. getContentMd5())
1493
+* Added additional response status codes
1494
+* Removed SSL information from the default User-Agent header
1495
+* DELETE requests can now send an entity body
1496
+* Added an EventDispatcher to the ExponentialBackoffPlugin and added an ExponentialBackoffLogger to log backoff retries
1497
+* Added the ability of the MockPlugin to consume mocked request bodies
1498
+* LogPlugin now exposes request and response objects in the extras array
1499
+
1500
+## 2.8.3 - 2012-07-30
1501
+
1502
+* Bug: Fixed a case where empty POST requests were sent as GET requests
1503
+* Bug: Fixed a bug in ExponentialBackoffPlugin that caused fatal errors when retrying an EntityEnclosingRequest that does not have a body
1504
+* Bug: Setting the response body of a request to null after completing a request, not when setting the state of a request to new
1505
+* Added multiple inheritance to service description commands
1506
+* Added an ApiCommandInterface and added `getParamNames()` and `hasParam()`
1507
+* Removed the default 2mb size cutoff from the Md5ValidatorPlugin so that it now defaults to validating everything
1508
+* Changed CurlMulti::perform to pass a smaller timeout to CurlMulti::executeHandles
1509
+
1510
+## 2.8.2 - 2012-07-24
1511
+
1512
+* Bug: Query string values set to 0 are no longer dropped from the query string
1513
+* Bug: A Collection object is no longer created each time a call is made to `Guzzle\Service\Command\AbstractCommand::getRequestHeaders()`
1514
+* Bug: `+` is now treated as an encoded space when parsing query strings
1515
+* QueryString and Collection performance improvements
1516
+* Allowing dot notation for class paths in filters attribute of a service descriptions
1517
+
1518
+## 2.8.1 - 2012-07-16
1519
+
1520
+* Loosening Event Dispatcher dependency
1521
+* POST redirects can now be customized using CURLOPT_POSTREDIR
1522
+
1523
+## 2.8.0 - 2012-07-15
1524
+
1525
+* BC: Guzzle\Http\Query
1526
+    * Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl)
1527
+    * Changed isEncodingValues() and isEncodingFields() to isUrlEncoding()
1528
+    * Changed setEncodeValues(bool) and setEncodeFields(bool) to useUrlEncoding(bool)
1529
+    * Changed the aggregation functions of QueryString to be static methods
1530
+    * Can now use fromString() with querystrings that have a leading ?
1531
+* cURL configuration values can be specified in service descriptions using `curl.` prefixed parameters
1532
+* Content-Length is set to 0 before emitting the request.before_send event when sending an empty request body
1533
+* Cookies are no longer URL decoded by default
1534
+* Bug: URI template variables set to null are no longer expanded
1535
+
1536
+## 2.7.2 - 2012-07-02
1537
+
1538
+* BC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\Http\Parser to Guzzle\Parser.
1539
+* BC: Removing Guzzle\Common\Batch\Batch::count() and replacing it with isEmpty()
1540
+* CachePlugin now allows for a custom request parameter function to check if a request can be cached
1541
+* Bug fix: CachePlugin now only caches GET and HEAD requests by default
1542
+* Bug fix: Using header glue when transferring headers over the wire
1543
+* Allowing deeply nested arrays for composite variables in URI templates
1544
+* Batch divisors can now return iterators or arrays
1545
+
1546
+## 2.7.1 - 2012-06-26
1547
+
1548
+* Minor patch to update version number in UA string
1549
+* Updating build process
1550
+
1551
+## 2.7.0 - 2012-06-25
1552
+
1553
+* BC: Inflection classes moved to Guzzle\Inflection. No longer static methods. Can now inject custom inflectors into classes.
1554
+* BC: Removed magic setX methods from commands
1555
+* BC: Magic methods mapped to service description commands are now inflected in the command factory rather than the client __call() method
1556
+* Verbose cURL options are no longer enabled by default. Set curl.debug to true on a client to enable.
1557
+* Bug: Now allowing colons in a response start-line (e.g. HTTP/1.1 503 Service Unavailable: Back-end server is at capacity)
1558
+* Guzzle\Service\Resource\ResourceIteratorApplyBatched now internally uses the Guzzle\Common\Batch namespace
1559
+* Added Guzzle\Service\Plugin namespace and a PluginCollectionPlugin
1560
+* Added the ability to set POST fields and files in a service description
1561
+* Guzzle\Http\EntityBody::factory() now accepts objects with a __toString() method
1562
+* Adding a command.before_prepare event to clients
1563
+* Added BatchClosureTransfer and BatchClosureDivisor
1564
+* BatchTransferException now includes references to the batch divisor and transfer strategies
1565
+* Fixed some tests so that they pass more reliably
1566
+* Added Guzzle\Common\Log\ArrayLogAdapter
1567
+
1568
+## 2.6.6 - 2012-06-10
1569
+
1570
+* BC: Removing Guzzle\Http\Plugin\BatchQueuePlugin
1571
+* BC: Removing Guzzle\Service\Command\CommandSet
1572
+* Adding generic batching system (replaces the batch queue plugin and command set)
1573
+* Updating ZF cache and log adapters and now using ZF's composer repository
1574
+* Bug: Setting the name of each ApiParam when creating through an ApiCommand
1575
+* Adding result_type, result_doc, deprecated, and doc_url to service descriptions
1576
+* Bug: Changed the default cookie header casing back to 'Cookie'
1577
+
1578
+## 2.6.5 - 2012-06-03
1579
+
1580
+* BC: Renaming Guzzle\Http\Message\RequestInterface::getResourceUri() to getResource()
1581
+* BC: Removing unused AUTH_BASIC and AUTH_DIGEST constants from
1582
+* BC: Guzzle\Http\Cookie is now used to manage Set-Cookie data, not Cookie data
1583
+* BC: Renaming methods in the CookieJarInterface
1584
+* Moving almost all cookie logic out of the CookiePlugin and into the Cookie or CookieJar implementations
1585
+* Making the default glue for HTTP headers ';' instead of ','
1586
+* Adding a removeValue to Guzzle\Http\Message\Header
1587
+* Adding getCookies() to request interface.
1588
+* Making it easier to add event subscribers to HasDispatcherInterface classes. Can now directly call addSubscriber()
1589
+
1590
+## 2.6.4 - 2012-05-30
1591
+
1592
+* BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class.
1593
+* BC: Moving ApiCommand specific functionality from the Inspector and on to the ApiCommand
1594
+* Bug: Fixing magic method command calls on clients
1595
+* Bug: Email constraint only validates strings
1596
+* Bug: Aggregate POST fields when POST files are present in curl handle
1597
+* Bug: Fixing default User-Agent header
1598
+* Bug: Only appending or prepending parameters in commands if they are specified
1599
+* Bug: Not requiring response reason phrases or status codes to match a predefined list of codes
1600
+* Allowing the use of dot notation for class namespaces when using instance_of constraint
1601
+* Added any_match validation constraint
1602
+* Added an AsyncPlugin
1603
+* Passing request object to the calculateWait method of the ExponentialBackoffPlugin
1604
+* Allowing the result of a command object to be changed
1605
+* Parsing location and type sub values when instantiating a service description rather than over and over at runtime
1606
+
1607
+## 2.6.3 - 2012-05-23
1608
+
1609
+* [BC] Guzzle\Common\FromConfigInterface no longer requires any config options.
1610
+* [BC] Refactoring how POST files are stored on an EntityEnclosingRequest. They are now separate from POST fields.
1611
+* You can now use an array of data when creating PUT request bodies in the request factory.
1612
+* Removing the requirement that HTTPS requests needed a Cache-Control: public directive to be cacheable.
1613
+* [Http] Adding support for Content-Type in multipart POST uploads per upload
1614
+* [Http] Added support for uploading multiple files using the same name (foo[0], foo[1])
1615
+* Adding more POST data operations for easier manipulation of POST data.
1616
+* You can now set empty POST fields.
1617
+* The body of a request is only shown on EntityEnclosingRequest objects that do not use POST files.
1618
+* Split the Guzzle\Service\Inspector::validateConfig method into two methods. One to initialize when a command is created, and one to validate.
1619
+* CS updates
1620
+
1621
+## 2.6.2 - 2012-05-19
1622
+
1623
+* [Http] Better handling of nested scope requests in CurlMulti.  Requests are now always prepares in the send() method rather than the addRequest() method.
1624
+
1625
+## 2.6.1 - 2012-05-19
1626
+
1627
+* [BC] Removing 'path' support in service descriptions.  Use 'uri'.
1628
+* [BC] Guzzle\Service\Inspector::parseDocBlock is now protected. Adding getApiParamsForClass() with cache.
1629
+* [BC] Removing Guzzle\Common\NullObject.  Use https://github.com/mtdowling/NullObject if you need it.
1630
+* [BC] Removing Guzzle\Common\XmlElement.
1631
+* All commands, both dynamic and concrete, have ApiCommand objects.
1632
+* Adding a fix for CurlMulti so that if all of the connections encounter some sort of curl error, then the loop exits.
1633
+* Adding checks to EntityEnclosingRequest so that empty POST files and fields are ignored.
1634
+* Making the method signature of Guzzle\Service\Builder\ServiceBuilder::factory more flexible.
1635
+
1636
+## 2.6.0 - 2012-05-15
1637
+
1638
+* [BC] Moving Guzzle\Service\Builder to Guzzle\Service\Builder\ServiceBuilder
1639
+* [BC] Executing a Command returns the result of the command rather than the command
1640
+* [BC] Moving all HTTP parsing logic to Guzzle\Http\Parsers. Allows for faster C implementations if needed.
1641
+* [BC] Changing the Guzzle\Http\Message\Response::setProtocol() method to accept a protocol and version in separate args.
1642
+* [BC] Moving ResourceIterator* to Guzzle\Service\Resource
1643
+* [BC] Completely refactored ResourceIterators to iterate over a cloned command object
1644
+* [BC] Moved Guzzle\Http\UriTemplate to Guzzle\Http\Parser\UriTemplate\UriTemplate
1645
+* [BC] Guzzle\Guzzle is now deprecated
1646
+* Moving Guzzle\Common\Guzzle::inject to Guzzle\Common\Collection::inject
1647
+* Adding Guzzle\Version class to give version information about Guzzle
1648
+* Adding Guzzle\Http\Utils class to provide getDefaultUserAgent() and getHttpDate()
1649
+* Adding Guzzle\Curl\CurlVersion to manage caching curl_version() data
1650
+* ServiceDescription and ServiceBuilder are now cacheable using similar configs
1651
+* Changing the format of XML and JSON service builder configs.  Backwards compatible.
1652
+* Cleaned up Cookie parsing
1653
+* Trimming the default Guzzle User-Agent header
1654
+* Adding a setOnComplete() method to Commands that is called when a command completes
1655
+* Keeping track of requests that were mocked in the MockPlugin
1656
+* Fixed a caching bug in the CacheAdapterFactory
1657
+* Inspector objects can be injected into a Command object
1658
+* Refactoring a lot of code and tests to be case insensitive when dealing with headers
1659
+* Adding Guzzle\Http\Message\HeaderComparison for easy comparison of HTTP headers using a DSL
1660
+* Adding the ability to set global option overrides to service builder configs
1661
+* Adding the ability to include other service builder config files from within XML and JSON files
1662
+* Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method.
1663
+
1664
+## 2.5.0 - 2012-05-08
1665
+
1666
+* Major performance improvements
1667
+* [BC] Simplifying Guzzle\Common\Collection.  Please check to see if you are using features that are now deprecated.
1668
+* [BC] Using a custom validation system that allows a flyweight implementation for much faster validation. No longer using Symfony2 Validation component.
1669
+* [BC] No longer supporting "{{ }}" for injecting into command or UriTemplates.  Use "{}"
1670
+* Added the ability to passed parameters to all requests created by a client
1671
+* Added callback functionality to the ExponentialBackoffPlugin
1672
+* Using microtime in ExponentialBackoffPlugin to allow more granular backoff strategies.
1673
+* Rewinding request stream bodies when retrying requests
1674
+* Exception is thrown when JSON response body cannot be decoded
1675
+* Added configurable magic method calls to clients and commands.  This is off by default.
1676
+* Fixed a defect that added a hash to every parsed URL part
1677
+* Fixed duplicate none generation for OauthPlugin.
1678
+* Emitting an event each time a client is generated by a ServiceBuilder
1679
+* Using an ApiParams object instead of a Collection for parameters of an ApiCommand
1680
+* cache.* request parameters should be renamed to params.cache.*
1681
+* Added the ability to set arbitrary curl options on requests (disable_wire, progress, etc.). See CurlHandle.
1682
+* Added the ability to disable type validation of service descriptions
1683
+* ServiceDescriptions and ServiceBuilders are now Serializable
Browse code

removed appinfo/info.xml appinfo/signature.json CHANGELOG.txt lib/AppInfo/Application.php css/style.css providers/Plivo

DoubleBastionAdmin authored on 05/11/2025 13:12:22
Showing 1 changed files
1 1
deleted file mode 100644
... ...
@@ -1,1450 +0,0 @@
1
-# Change Log
2
-
3
-Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.
4
-
5
-## 7.2.0 - 2020-10-10
6
-
7
-### Added
8
-
9
-- Support for PHP 8 [#2712](https://github.com/guzzle/guzzle/pull/2712), [#2715](https://github.com/guzzle/guzzle/pull/2715), [#2789](https://github.com/guzzle/guzzle/pull/2789)
10
-- Support passing a body summarizer to the http errors middleware [#2795](https://github.com/guzzle/guzzle/pull/2795)
11
-
12
-### Fixed
13
-
14
-- Handle exceptions during response creation [#2591](https://github.com/guzzle/guzzle/pull/2591)
15
-- Fix CURLOPT_ENCODING not to be overwritten [#2595](https://github.com/guzzle/guzzle/pull/2595)
16
-- Make sure the Request always has a body object [#2804](https://github.com/guzzle/guzzle/pull/2804)
17
-
18
-### Changed
19
-
20
-- The `TooManyRedirectsException` has a response [#2660](https://github.com/guzzle/guzzle/pull/2660)
21
-- Avoid "functions" from dependencies [#2712](https://github.com/guzzle/guzzle/pull/2712)
22
-
23
-### Deprecated
24
-
25
-- Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786)
26
-
27
-## 7.1.1 - 2020-09-30
28
-
29
-### Fixed
30
-
31
-- Incorrect EOF detection for response body streams on Windows.
32
-
33
-### Changed
34
-
35
-- We dont connect curl `sink` on HEAD requests.
36
-- Removed some PHP 5 workarounds
37
-
38
-## 7.1.0 - 2020-09-22
39
-
40
-### Added
41
-
42
-- `GuzzleHttp\MessageFormatterInterface`
43
-
44
-### Fixed
45
-
46
-- Fixed issue that caused cookies with no value not to be stored.
47
-- On redirects, we allow all safe methods like GET, HEAD and OPTIONS.
48
-- Fixed logging on empty responses.
49
-- Make sure MessageFormatter::format returns string
50
-
51
-### Deprecated
52
-
53
-- All functions in `GuzzleHttp` has been deprecated. Use static methods on `Utils` instead.
54
-- `ClientInterface::getConfig()`
55
-- `Client::getConfig()`
56
-- `Client::__call()`
57
-- `Utils::defaultCaBundle()`
58
-- `CurlFactory::LOW_CURL_VERSION_NUMBER`
59
-
60
-## 7.0.1 - 2020-06-27
61
-
62
-* Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699)
63
-
64
-## 7.0.0 - 2020-06-27
65
-
66
-No changes since 7.0.0-rc1.
67
-
68
-## 7.0.0-rc1 - 2020-06-15
69
-
70
-### Changed
71
-
72
-* Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629)
73
-* Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675)
74
-
75
-## 7.0.0-beta2 - 2020-05-25
76
-
77
-### Added
78
-
79
-* Using `Utils` class instead of functions in the `GuzzleHttp` namespace. [#2546](https://github.com/guzzle/guzzle/pull/2546)
80
-* `ClientInterface::MAJOR_VERSION` [#2583](https://github.com/guzzle/guzzle/pull/2583)
81
-
82
-### Changed
83
-
84
-* Avoid the `getenv` function when unsafe [#2531](https://github.com/guzzle/guzzle/pull/2531)
85
-* Added real client methods [#2529](https://github.com/guzzle/guzzle/pull/2529)
86
-* Avoid functions due to global install conflicts [#2546](https://github.com/guzzle/guzzle/pull/2546)
87
-* Use Symfony intl-idn polyfill [#2550](https://github.com/guzzle/guzzle/pull/2550)
88
-* Adding methods for HTTP verbs like `Client::get()`, `Client::head()`, `Client::patch()` etc [#2529](https://github.com/guzzle/guzzle/pull/2529)
89
-* `ConnectException` extends `TransferException` [#2541](https://github.com/guzzle/guzzle/pull/2541)
90
-* Updated the default User Agent to "GuzzleHttp/7" [#2654](https://github.com/guzzle/guzzle/pull/2654)
91
-
92
-### Fixed
93
-
94
-* Various intl icu issues [#2626](https://github.com/guzzle/guzzle/pull/2626)
95
-
96
-### Removed
97
-
98
-* Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528)
99
-
100
-## 7.0.0-beta1 - 2019-12-30
101
-
102
-The diff might look very big but 95% of Guzzle users will be able to upgrade without modification.
103
-Please see [the upgrade document](UPGRADING.md) that describes all BC breaking changes.
104
-
105
-### Added
106
-
107
-* Implement PSR-18 and dropped PHP 5 support [#2421](https://github.com/guzzle/guzzle/pull/2421) [#2474](https://github.com/guzzle/guzzle/pull/2474)
108
-* PHP 7 types [#2442](https://github.com/guzzle/guzzle/pull/2442) [#2449](https://github.com/guzzle/guzzle/pull/2449) [#2466](https://github.com/guzzle/guzzle/pull/2466) [#2497](https://github.com/guzzle/guzzle/pull/2497) [#2499](https://github.com/guzzle/guzzle/pull/2499)
109
-* IDN support for redirects [2424](https://github.com/guzzle/guzzle/pull/2424)
110
-
111
-### Changed
112
-
113
-* Dont allow passing null as third argument to `BadResponseException::__construct()` [#2427](https://github.com/guzzle/guzzle/pull/2427)
114
-* Use SAPI constant instead of method call [#2450](https://github.com/guzzle/guzzle/pull/2450)
115
-* Use native function invocation [#2444](https://github.com/guzzle/guzzle/pull/2444)
116
-* Better defaults for PHP installations with old ICU lib [2454](https://github.com/guzzle/guzzle/pull/2454)
117
-* Added visibility to all constants [#2462](https://github.com/guzzle/guzzle/pull/2462)
118
-* Dont allow passing `null` as URI to `Client::request()` and `Client::requestAsync()` [#2461](https://github.com/guzzle/guzzle/pull/2461)
119
-* Widen the exception argument to throwable [#2495](https://github.com/guzzle/guzzle/pull/2495)
120
-
121
-### Fixed
122
-
123
-* Logging when Promise rejected with a string [#2311](https://github.com/guzzle/guzzle/pull/2311)
124
-
125
-### Removed
126
-
127
-* Class `SeekException` [#2162](https://github.com/guzzle/guzzle/pull/2162)
128
-* `RequestException::getResponseBodySummary()` [#2425](https://github.com/guzzle/guzzle/pull/2425)
129
-* `CookieJar::getCookieValue()` [#2433](https://github.com/guzzle/guzzle/pull/2433)
130
-* `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440)
131
-* Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464)
132
-
133
-## 6.5.2 - 2019-12-23
134
-
135
-* idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489)
136
-
137
-## 6.5.1 - 2019-12-21
138
-
139
-* Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454)
140
-* IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424)
141
-
142
-## 6.5.0 - 2019-12-07
143
-
144
-* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143)
145
-* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287)
146
-* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132)
147
-* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132)
148
-* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348)
149
-* Deprecated `ClientInterface::VERSION`
150
-
151
-## 6.4.1 - 2019-10-23
152
-
153
-* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that
154
-* Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar`
155
-
156
-## 6.4.0 - 2019-10-23
157
-
158
-* Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108)
159
-* Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [#2081](https://github.com/guzzle/guzzle/pull/2081)
160
-* Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [#2161](https://github.com/guzzle/guzzle/pull/2161)
161
-* Improvement: Added `GuzzleHttp\Exception\InvalidArgumentException` [#2163](https://github.com/guzzle/guzzle/pull/2163)
162
-* Improvement: Added `GuzzleHttp\_current_time()` to use `hrtime()` if that function exists. [#2242](https://github.com/guzzle/guzzle/pull/2242)
163
-* Improvement: Added curl's `appconnect_time` in `TransferStats` [#2284](https://github.com/guzzle/guzzle/pull/2284)
164
-* Improvement: Make GuzzleException extend Throwable wherever it's available [#2273](https://github.com/guzzle/guzzle/pull/2273)
165
-* Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335)
166
-* Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362)
167
-
168
-## 6.3.3 - 2018-04-22
169
-
170
-* Fix: Default headers when decode_content is specified
171
-
172
-
173
-## 6.3.2 - 2018-03-26
174
-
175
-* Fix: Release process
176
-
177
-
178
-## 6.3.1 - 2018-03-26
179
-
180
-* Bug fix: Parsing 0 epoch expiry times in cookies [#2014](https://github.com/guzzle/guzzle/pull/2014)
181
-* Improvement: Better ConnectException detection [#2012](https://github.com/guzzle/guzzle/pull/2012)
182
-* Bug fix: Malformed domain that contains a "/" [#1999](https://github.com/guzzle/guzzle/pull/1999)
183
-* Bug fix: Undefined offset when a cookie has no first key-value pair [#1998](https://github.com/guzzle/guzzle/pull/1998)
184
-* Improvement: Support PHPUnit 6 [#1953](https://github.com/guzzle/guzzle/pull/1953)
185
-* Bug fix: Support empty headers [#1915](https://github.com/guzzle/guzzle/pull/1915)
186
-* Bug fix: Ignore case during header modifications [#1916](https://github.com/guzzle/guzzle/pull/1916)
187
-
188
-+ Minor code cleanups, documentation fixes and clarifications.
189
-
190
-
191
-## 6.3.0 - 2017-06-22
192
-
193
-* Feature: force IP resolution (ipv4 or ipv6) [#1608](https://github.com/guzzle/guzzle/pull/1608), [#1659](https://github.com/guzzle/guzzle/pull/1659)
194
-* Improvement: Don't include summary in exception message when body is empty [#1621](https://github.com/guzzle/guzzle/pull/1621)
195
-* Improvement: Handle `on_headers` option in MockHandler [#1580](https://github.com/guzzle/guzzle/pull/1580)
196
-* Improvement: Added SUSE Linux CA path [#1609](https://github.com/guzzle/guzzle/issues/1609)
197
-* Improvement: Use class reference for getting the name of the class instead of using hardcoded strings [#1641](https://github.com/guzzle/guzzle/pull/1641)
198
-* Feature: Added `read_timeout` option [#1611](https://github.com/guzzle/guzzle/pull/1611)
199
-* Bug fix: PHP 7.x fixes [#1685](https://github.com/guzzle/guzzle/pull/1685), [#1686](https://github.com/guzzle/guzzle/pull/1686), [#1811](https://github.com/guzzle/guzzle/pull/1811)
200
-* Deprecation: BadResponseException instantiation without a response [#1642](https://github.com/guzzle/guzzle/pull/1642)
201
-* Feature: Added NTLM auth [#1569](https://github.com/guzzle/guzzle/pull/1569)
202
-* Feature: Track redirect HTTP status codes [#1711](https://github.com/guzzle/guzzle/pull/1711)
203
-* Improvement: Check handler type during construction [#1745](https://github.com/guzzle/guzzle/pull/1745)
204
-* Improvement: Always include the Content-Length if there's a body [#1721](https://github.com/guzzle/guzzle/pull/1721)
205
-* Feature: Added convenience method to access a cookie by name [#1318](https://github.com/guzzle/guzzle/pull/1318)
206
-* Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684)
207
-* Improvement:  	Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827)
208
-
209
-
210
-+ Minor code cleanups, documentation fixes and clarifications.
211
-
212
-## 6.2.3 - 2017-02-28
213
-
214
-* Fix deprecations with guzzle/psr7 version 1.4
215
-
216
-## 6.2.2 - 2016-10-08
217
-
218
-* Allow to pass nullable Response to delay callable
219
-* Only add scheme when host is present
220
-* Fix drain case where content-length is the literal string zero
221
-* Obfuscate in-URL credentials in exceptions
222
-
223
-## 6.2.1 - 2016-07-18
224
-
225
-* Address HTTP_PROXY security vulnerability, CVE-2016-5385:
226
-  https://httpoxy.org/
227
-* Fixing timeout bug with StreamHandler:
228
-  https://github.com/guzzle/guzzle/pull/1488
229
-* Only read up to `Content-Length` in PHP StreamHandler to avoid timeouts when
230
-  a server does not honor `Connection: close`.
231
-* Ignore URI fragment when sending requests.
232
-
233
-## 6.2.0 - 2016-03-21
234
-
235
-* Feature: added `GuzzleHttp\json_encode` and `GuzzleHttp\json_decode`.
236
-  https://github.com/guzzle/guzzle/pull/1389
237
-* Bug fix: Fix sleep calculation when waiting for delayed requests.
238
-  https://github.com/guzzle/guzzle/pull/1324
239
-* Feature: More flexible history containers.
240
-  https://github.com/guzzle/guzzle/pull/1373
241
-* Bug fix: defer sink stream opening in StreamHandler.
242
-  https://github.com/guzzle/guzzle/pull/1377
243
-* Bug fix: do not attempt to escape cookie values.
244
-  https://github.com/guzzle/guzzle/pull/1406
245
-* Feature: report original content encoding and length on decoded responses.
246
-  https://github.com/guzzle/guzzle/pull/1409
247
-* Bug fix: rewind seekable request bodies before dispatching to cURL.
248
-  https://github.com/guzzle/guzzle/pull/1422
249
-* Bug fix: provide an empty string to `http_build_query` for HHVM workaround.
250
-  https://github.com/guzzle/guzzle/pull/1367
251
-
252
-## 6.1.1 - 2015-11-22
253
-
254
-* Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler
255
-  https://github.com/guzzle/guzzle/commit/911bcbc8b434adce64e223a6d1d14e9a8f63e4e4
256
-* Feature: HandlerStack is now more generic.
257
-  https://github.com/guzzle/guzzle/commit/f2102941331cda544745eedd97fc8fd46e1ee33e
258
-* Bug fix: setting verify to false in the StreamHandler now disables peer
259
-  verification. https://github.com/guzzle/guzzle/issues/1256
260
-* Feature: Middleware now uses an exception factory, including more error
261
-  context. https://github.com/guzzle/guzzle/pull/1282
262
-* Feature: better support for disabled functions.
263
-  https://github.com/guzzle/guzzle/pull/1287
264
-* Bug fix: fixed regression where MockHandler was not using `sink`.
265
-  https://github.com/guzzle/guzzle/pull/1292
266
-
267
-## 6.1.0 - 2015-09-08
268
-
269
-* Feature: Added the `on_stats` request option to provide access to transfer
270
-  statistics for requests. https://github.com/guzzle/guzzle/pull/1202
271
-* Feature: Added the ability to persist session cookies in CookieJars.
272
-  https://github.com/guzzle/guzzle/pull/1195
273
-* Feature: Some compatibility updates for Google APP Engine
274
-  https://github.com/guzzle/guzzle/pull/1216
275
-* Feature: Added support for NO_PROXY to prevent the use of a proxy based on
276
-  a simple set of rules. https://github.com/guzzle/guzzle/pull/1197
277
-* Feature: Cookies can now contain square brackets.
278
-  https://github.com/guzzle/guzzle/pull/1237
279
-* Bug fix: Now correctly parsing `=` inside of quotes in Cookies.
280
-  https://github.com/guzzle/guzzle/pull/1232
281
-* Bug fix: Cusotm cURL options now correctly override curl options of the
282
-  same name. https://github.com/guzzle/guzzle/pull/1221
283
-* Bug fix: Content-Type header is now added when using an explicitly provided
284
-  multipart body. https://github.com/guzzle/guzzle/pull/1218
285
-* Bug fix: Now ignoring Set-Cookie headers that have no name.
286
-* Bug fix: Reason phrase is no longer cast to an int in some cases in the
287
-  cURL handler. https://github.com/guzzle/guzzle/pull/1187
288
-* Bug fix: Remove the Authorization header when redirecting if the Host
289
-  header changes. https://github.com/guzzle/guzzle/pull/1207
290
-* Bug fix: Cookie path matching fixes
291
-  https://github.com/guzzle/guzzle/issues/1129
292
-* Bug fix: Fixing the cURL `body_as_string` setting
293
-  https://github.com/guzzle/guzzle/pull/1201
294
-* Bug fix: quotes are no longer stripped when parsing cookies.
295
-  https://github.com/guzzle/guzzle/issues/1172
296
-* Bug fix: `form_params` and `query` now always uses the `&` separator.
297
-  https://github.com/guzzle/guzzle/pull/1163
298
-* Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set.
299
-  https://github.com/guzzle/guzzle/pull/1189
300
-
301
-## 6.0.2 - 2015-07-04
302
-
303
-* Fixed a memory leak in the curl handlers in which references to callbacks
304
-  were not being removed by `curl_reset`.
305
-* Cookies are now extracted properly before redirects.
306
-* Cookies now allow more character ranges.
307
-* Decoded Content-Encoding responses are now modified to correctly reflect
308
-  their state if the encoding was automatically removed by a handler. This
309
-  means that the `Content-Encoding` header may be removed an the
310
-  `Content-Length` modified to reflect the message size after removing the
311
-  encoding.
312
-* Added a more explicit error message when trying to use `form_params` and
313
-  `multipart` in the same request.
314
-* Several fixes for HHVM support.
315
-* Functions are now conditionally required using an additional level of
316
-  indirection to help with global Composer installations.
317
-
318
-## 6.0.1 - 2015-05-27
319
-
320
-* Fixed a bug with serializing the `query` request option where the `&`
321
-  separator was missing.
322
-* Added a better error message for when `body` is provided as an array. Please
323
-  use `form_params` or `multipart` instead.
324
-* Various doc fixes.
325
-
326
-## 6.0.0 - 2015-05-26
327
-
328
-* See the UPGRADING.md document for more information.
329
-* Added `multipart` and `form_params` request options.
330
-* Added `synchronous` request option.
331
-* Added the `on_headers` request option.
332
-* Fixed `expect` handling.
333
-* No longer adding default middlewares in the client ctor. These need to be
334
-  present on the provided handler in order to work.
335
-* Requests are no longer initiated when sending async requests with the
336
-  CurlMultiHandler. This prevents unexpected recursion from requests completing
337
-  while ticking the cURL loop.
338
-* Removed the semantics of setting `default` to `true`. This is no longer
339
-  required now that the cURL loop is not ticked for async requests.
340
-* Added request and response logging middleware.
341
-* No longer allowing self signed certificates when using the StreamHandler.
342
-* Ensuring that `sink` is valid if saving to a file.
343
-* Request exceptions now include a "handler context" which provides handler
344
-  specific contextual information.
345
-* Added `GuzzleHttp\RequestOptions` to allow request options to be applied
346
-  using constants.
347
-* `$maxHandles` has been removed from CurlMultiHandler.
348
-* `MultipartPostBody` is now part of the `guzzlehttp/psr7` package.
349
-
350
-## 5.3.0 - 2015-05-19
351
-
352
-* Mock now supports `save_to`
353
-* Marked `AbstractRequestEvent::getTransaction()` as public.
354
-* Fixed a bug in which multiple headers using different casing would overwrite
355
-  previous headers in the associative array.
356
-* Added `Utils::getDefaultHandler()`
357
-* Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated.
358
-* URL scheme is now always lowercased.
359
-
360
-## 6.0.0-beta.1
361
-
362
-* Requires PHP >= 5.5
363
-* Updated to use PSR-7
364
-  * Requires immutable messages, which basically means an event based system
365
-    owned by a request instance is no longer possible.
366
-  * Utilizing the [Guzzle PSR-7 package](https://github.com/guzzle/psr7).
367
-  * Removed the dependency on `guzzlehttp/streams`. These stream abstractions
368
-    are available in the `guzzlehttp/psr7` package under the `GuzzleHttp\Psr7`
369
-    namespace.
370
-* Added middleware and handler system
371
-  * Replaced the Guzzle event and subscriber system with a middleware system.
372
-  * No longer depends on RingPHP, but rather places the HTTP handlers directly
373
-    in Guzzle, operating on PSR-7 messages.
374
-  * Retry logic is now encapsulated in `GuzzleHttp\Middleware::retry`, which
375
-    means the `guzzlehttp/retry-subscriber` is now obsolete.
376
-  * Mocking responses is now handled using `GuzzleHttp\Handler\MockHandler`.
377
-* Asynchronous responses
378
-  * No longer supports the `future` request option to send an async request.
379
-    Instead, use one of the `*Async` methods of a client (e.g., `requestAsync`,
380
-    `getAsync`, etc.).
381
-  * Utilizing `GuzzleHttp\Promise` instead of React's promise library to avoid
382
-    recursion required by chaining and forwarding react promises. See
383
-    https://github.com/guzzle/promises
384
-  * Added `requestAsync` and `sendAsync` to send request asynchronously.
385
-  * Added magic methods for `getAsync()`, `postAsync()`, etc. to send requests
386
-    asynchronously.
387
-* Request options
388
-  * POST and form updates
389
-    * Added the `form_fields` and `form_files` request options.
390
-    * Removed the `GuzzleHttp\Post` namespace.
391
-    * The `body` request option no longer accepts an array for POST requests.
392
-  * The `exceptions` request option has been deprecated in favor of the
393
-    `http_errors` request options.
394
-  * The `save_to` request option has been deprecated in favor of `sink` request
395
-    option.
396
-* Clients no longer accept an array of URI template string and variables for
397
-  URI variables. You will need to expand URI templates before passing them
398
-  into a client constructor or request method.
399
-* Client methods `get()`, `post()`, `put()`, `patch()`, `options()`, etc. are
400
-  now magic methods that will send synchronous requests.
401
-* Replaced `Utils.php` with plain functions in `functions.php`.
402
-* Removed `GuzzleHttp\Collection`.
403
-* Removed `GuzzleHttp\BatchResults`. Batched pool results are now returned as
404
-  an array.
405
-* Removed `GuzzleHttp\Query`. Query string handling is now handled using an
406
-  associative array passed into the `query` request option. The query string
407
-  is serialized using PHP's `http_build_query`. If you need more control, you
408
-  can pass the query string in as a string.
409
-* `GuzzleHttp\QueryParser` has been replaced with the
410
-  `GuzzleHttp\Psr7\parse_query`.
411
-
412
-## 5.2.0 - 2015-01-27
413
-
414
-* Added `AppliesHeadersInterface` to make applying headers to a request based
415
-  on the body more generic and not specific to `PostBodyInterface`.
416
-* Reduced the number of stack frames needed to send requests.
417
-* Nested futures are now resolved in the client rather than the RequestFsm
418
-* Finishing state transitions is now handled in the RequestFsm rather than the
419
-  RingBridge.
420
-* Added a guard in the Pool class to not use recursion for request retries.
421
-
422
-## 5.1.0 - 2014-12-19
423
-
424
-* Pool class no longer uses recursion when a request is intercepted.
425
-* The size of a Pool can now be dynamically adjusted using a callback.
426
-  See https://github.com/guzzle/guzzle/pull/943.
427
-* Setting a request option to `null` when creating a request with a client will
428
-  ensure that the option is not set. This allows you to overwrite default
429
-  request options on a per-request basis.
430
-  See https://github.com/guzzle/guzzle/pull/937.
431
-* Added the ability to limit which protocols are allowed for redirects by
432
-  specifying a `protocols` array in the `allow_redirects` request option.
433
-* Nested futures due to retries are now resolved when waiting for synchronous
434
-  responses. See https://github.com/guzzle/guzzle/pull/947.
435
-* `"0"` is now an allowed URI path. See
436
-  https://github.com/guzzle/guzzle/pull/935.
437
-* `Query` no longer typehints on the `$query` argument in the constructor,
438
-  allowing for strings and arrays.
439
-* Exceptions thrown in the `end` event are now correctly wrapped with Guzzle
440
-  specific exceptions if necessary.
441
-
442
-## 5.0.3 - 2014-11-03
443
-
444
-This change updates query strings so that they are treated as un-encoded values
445
-by default where the value represents an un-encoded value to send over the
446
-wire. A Query object then encodes the value before sending over the wire. This
447
-means that even value query string values (e.g., ":") are url encoded. This
448
-makes the Query class match PHP's http_build_query function. However, if you
449
-want to send requests over the wire using valid query string characters that do
450
-not need to be encoded, then you can provide a string to Url::setQuery() and
451
-pass true as the second argument to specify that the query string is a raw
452
-string that should not be parsed or encoded (unless a call to getQuery() is
453
-subsequently made, forcing the query-string to be converted into a Query
454
-object).
455
-
456
-## 5.0.2 - 2014-10-30
457
-
458
-* Added a trailing `\r\n` to multipart/form-data payloads. See
459
-  https://github.com/guzzle/guzzle/pull/871
460
-* Added a `GuzzleHttp\Pool::send()` convenience method to match the docs.
461
-* Status codes are now returned as integers. See
462
-  https://github.com/guzzle/guzzle/issues/881
463
-* No longer overwriting an existing `application/x-www-form-urlencoded` header
464
-  when sending POST requests, allowing for customized headers. See
465
-  https://github.com/guzzle/guzzle/issues/877
466
-* Improved path URL serialization.
467
-
468
-  * No longer double percent-encoding characters in the path or query string if
469
-    they are already encoded.
470
-  * Now properly encoding the supplied path to a URL object, instead of only
471
-    encoding ' ' and '?'.
472
-  * Note: This has been changed in 5.0.3 to now encode query string values by
473
-    default unless the `rawString` argument is provided when setting the query
474
-    string on a URL: Now allowing many more characters to be present in the
475
-    query string without being percent encoded. See https://tools.ietf.org/html/rfc3986#appendix-A
476
-
477
-## 5.0.1 - 2014-10-16
478
-
479
-Bugfix release.
480
-
481
-* Fixed an issue where connection errors still returned response object in
482
-  error and end events event though the response is unusable. This has been
483
-  corrected so that a response is not returned in the `getResponse` method of
484
-  these events if the response did not complete. https://github.com/guzzle/guzzle/issues/867
485
-* Fixed an issue where transfer statistics were not being populated in the
486
-  RingBridge. https://github.com/guzzle/guzzle/issues/866
487
-
488
-## 5.0.0 - 2014-10-12
489
-
490
-Adding support for non-blocking responses and some minor API cleanup.
491
-
492
-### New Features
493
-
494
-* Added support for non-blocking responses based on `guzzlehttp/guzzle-ring`.
495
-* Added a public API for creating a default HTTP adapter.
496
-* Updated the redirect plugin to be non-blocking so that redirects are sent
497
-  concurrently. Other plugins like this can now be updated to be non-blocking.
498
-* Added a "progress" event so that you can get upload and download progress
499
-  events.
500
-* Added `GuzzleHttp\Pool` which implements FutureInterface and transfers
501
-  requests concurrently using a capped pool size as efficiently as possible.
502
-* Added `hasListeners()` to EmitterInterface.
503
-* Removed `GuzzleHttp\ClientInterface::sendAll` and marked
504
-  `GuzzleHttp\Client::sendAll` as deprecated (it's still there, just not the
505
-  recommended way).
506
-
507
-### Breaking changes
508
-
509
-The breaking changes in this release are relatively minor. The biggest thing to
510
-look out for is that request and response objects no longer implement fluent
511
-interfaces.
512
-
513
-* Removed the fluent interfaces (i.e., `return $this`) from requests,
514
-  responses, `GuzzleHttp\Collection`, `GuzzleHttp\Url`,
515
-  `GuzzleHttp\Query`, `GuzzleHttp\Post\PostBody`, and
516
-  `GuzzleHttp\Cookie\SetCookie`. This blog post provides a good outline of
517
-  why I did this: https://ocramius.github.io/blog/fluent-interfaces-are-evil/.
518
-  This also makes the Guzzle message interfaces compatible with the current
519
-  PSR-7 message proposal.
520
-* Removed "functions.php", so that Guzzle is truly PSR-4 compliant. Except
521
-  for the HTTP request functions from function.php, these functions are now
522
-  implemented in `GuzzleHttp\Utils` using camelCase. `GuzzleHttp\json_decode`
523
-  moved to `GuzzleHttp\Utils::jsonDecode`. `GuzzleHttp\get_path` moved to
524
-  `GuzzleHttp\Utils::getPath`. `GuzzleHttp\set_path` moved to
525
-  `GuzzleHttp\Utils::setPath`. `GuzzleHttp\batch` should now be
526
-  `GuzzleHttp\Pool::batch`, which returns an `objectStorage`. Using functions.php
527
-  caused problems for many users: they aren't PSR-4 compliant, require an
528
-  explicit include, and needed an if-guard to ensure that the functions are not
529
-  declared multiple times.
530
-* Rewrote adapter layer.
531
-    * Removing all classes from `GuzzleHttp\Adapter`, these are now
532
-      implemented as callables that are stored in `GuzzleHttp\Ring\Client`.
533
-    * Removed the concept of "parallel adapters". Sending requests serially or
534
-      concurrently is now handled using a single adapter.
535
-    * Moved `GuzzleHttp\Adapter\Transaction` to `GuzzleHttp\Transaction`. The
536
-      Transaction object now exposes the request, response, and client as public
537
-      properties. The getters and setters have been removed.
538
-* Removed the "headers" event. This event was only useful for changing the
539
-  body a response once the headers of the response were known. You can implement
540
-  a similar behavior in a number of ways. One example might be to use a
541
-  FnStream that has access to the transaction being sent. For example, when the
542
-  first byte is written, you could check if the response headers match your
543
-  expectations, and if so, change the actual stream body that is being
544
-  written to.
545
-* Removed the `asArray` parameter from
546
-  `GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header
547
-  value as an array, then use the newly added `getHeaderAsArray()` method of
548
-  `MessageInterface`. This change makes the Guzzle interfaces compatible with
549
-  the PSR-7 interfaces.
550
-* `GuzzleHttp\Message\MessageFactory` no longer allows subclasses to add
551
-  custom request options using double-dispatch (this was an implementation
552
-  detail). Instead, you should now provide an associative array to the
553
-  constructor which is a mapping of the request option name mapping to a
554
-  function that applies the option value to a request.
555
-* Removed the concept of "throwImmediately" from exceptions and error events.
556
-  This control mechanism was used to stop a transfer of concurrent requests
557
-  from completing. This can now be handled by throwing the exception or by
558
-  cancelling a pool of requests or each outstanding future request individually.
559
-* Updated to "GuzzleHttp\Streams" 3.0.
560
-    * `GuzzleHttp\Stream\StreamInterface::getContents()` no longer accepts a
561
-      `maxLen` parameter. This update makes the Guzzle streams project
562
-      compatible with the current PSR-7 proposal.
563
-    * `GuzzleHttp\Stream\Stream::__construct`,
564
-      `GuzzleHttp\Stream\Stream::factory`, and
565
-      `GuzzleHttp\Stream\Utils::create` no longer accept a size in the second
566
-      argument. They now accept an associative array of options, including the
567
-      "size" key and "metadata" key which can be used to provide custom metadata.
568
-
569
-## 4.2.2 - 2014-09-08
570
-
571
-* Fixed a memory leak in the CurlAdapter when reusing cURL handles.
572
-* No longer using `request_fulluri` in stream adapter proxies.
573
-* Relative redirects are now based on the last response, not the first response.
574
-
575
-## 4.2.1 - 2014-08-19
576
-
577
-* Ensuring that the StreamAdapter does not always add a Content-Type header
578
-* Adding automated github releases with a phar and zip
579
-
580
-## 4.2.0 - 2014-08-17
581
-
582
-* Now merging in default options using a case-insensitive comparison.
583
-  Closes https://github.com/guzzle/guzzle/issues/767
584
-* Added the ability to automatically decode `Content-Encoding` response bodies
585
-  using the `decode_content` request option. This is set to `true` by default
586
-  to decode the response body if it comes over the wire with a
587
-  `Content-Encoding`. Set this value to `false` to disable decoding the
588
-  response content, and pass a string to provide a request `Accept-Encoding`
589
-  header and turn on automatic response decoding. This feature now allows you
590
-  to pass an `Accept-Encoding` header in the headers of a request but still
591
-  disable automatic response decoding.
592
-  Closes https://github.com/guzzle/guzzle/issues/764
593
-* Added the ability to throw an exception immediately when transferring
594
-  requests in parallel. Closes https://github.com/guzzle/guzzle/issues/760
595
-* Updating guzzlehttp/streams dependency to ~2.1
596
-* No longer utilizing the now deprecated namespaced methods from the stream
597
-  package.
598
-
599
-## 4.1.8 - 2014-08-14
600
-
601
-* Fixed an issue in the CurlFactory that caused setting the `stream=false`
602
-  request option to throw an exception.
603
-  See: https://github.com/guzzle/guzzle/issues/769
604
-* TransactionIterator now calls rewind on the inner iterator.
605
-  See: https://github.com/guzzle/guzzle/pull/765
606
-* You can now set the `Content-Type` header to `multipart/form-data`
607
-  when creating POST requests to force multipart bodies.
608
-  See https://github.com/guzzle/guzzle/issues/768
609
-
610
-## 4.1.7 - 2014-08-07
611
-
612
-* Fixed an error in the HistoryPlugin that caused the same request and response
613
-  to be logged multiple times when an HTTP protocol error occurs.
614
-* Ensuring that cURL does not add a default Content-Type when no Content-Type
615
-  has been supplied by the user. This prevents the adapter layer from modifying
616
-  the request that is sent over the wire after any listeners may have already
617
-  put the request in a desired state (e.g., signed the request).
618
-* Throwing an exception when you attempt to send requests that have the
619
-  "stream" set to true in parallel using the MultiAdapter.
620
-* Only calling curl_multi_select when there are active cURL handles. This was
621
-  previously changed and caused performance problems on some systems due to PHP
622
-  always selecting until the maximum select timeout.
623
-* Fixed a bug where multipart/form-data POST fields were not correctly
624
-  aggregated (e.g., values with "&").
625
-
626
-## 4.1.6 - 2014-08-03
627
-
628
-* Added helper methods to make it easier to represent messages as strings,
629
-  including getting the start line and getting headers as a string.
630
-
631
-## 4.1.5 - 2014-08-02
632
-
633
-* Automatically retrying cURL "Connection died, retrying a fresh connect"
634
-  errors when possible.
635
-* cURL implementation cleanup
636
-* Allowing multiple event subscriber listeners to be registered per event by
637
-  passing an array of arrays of listener configuration.
638
-
639
-## 4.1.4 - 2014-07-22
640
-
641
-* Fixed a bug that caused multi-part POST requests with more than one field to
642
-  serialize incorrectly.
643
-* Paths can now be set to "0"
644
-* `ResponseInterface::xml` now accepts a `libxml_options` option and added a
645
-  missing default argument that was required when parsing XML response bodies.
646
-* A `save_to` stream is now created lazily, which means that files are not
647
-  created on disk unless a request succeeds.
648
-
649
-## 4.1.3 - 2014-07-15
650
-
651
-* Various fixes to multipart/form-data POST uploads
652
-* Wrapping function.php in an if-statement to ensure Guzzle can be used
653
-  globally and in a Composer install
654
-* Fixed an issue with generating and merging in events to an event array
655
-* POST headers are only applied before sending a request to allow you to change
656
-  the query aggregator used before uploading
657
-* Added much more robust query string parsing
658
-* Fixed various parsing and normalization issues with URLs
659
-* Fixing an issue where multi-valued headers were not being utilized correctly
660
-  in the StreamAdapter
661
-
662
-## 4.1.2 - 2014-06-18
663
-
664
-* Added support for sending payloads with GET requests
665
-
666
-## 4.1.1 - 2014-06-08
667
-
668
-* Fixed an issue related to using custom message factory options in subclasses
669
-* Fixed an issue with nested form fields in a multi-part POST
670
-* Fixed an issue with using the `json` request option for POST requests
671
-* Added `ToArrayInterface` to `GuzzleHttp\Cookie\CookieJar`
672
-
673
-## 4.1.0 - 2014-05-27
674
-
675
-* Added a `json` request option to easily serialize JSON payloads.
676
-* Added a `GuzzleHttp\json_decode()` wrapper to safely parse JSON.
677
-* Added `setPort()` and `getPort()` to `GuzzleHttp\Message\RequestInterface`.
678
-* Added the ability to provide an emitter to a client in the client constructor.
679
-* Added the ability to persist a cookie session using $_SESSION.
680
-* Added a trait that can be used to add event listeners to an iterator.
681
-* Removed request method constants from RequestInterface.
682
-* Fixed warning when invalid request start-lines are received.
683
-* Updated MessageFactory to work with custom request option methods.
684
-* Updated cacert bundle to latest build.
685
-
686
-4.0.2 (2014-04-16)
687
-
688
-* Proxy requests using the StreamAdapter now properly use request_fulluri (#632)
689
-* Added the ability to set scalars as POST fields (#628)
690
-
691
-## 4.0.1 - 2014-04-04
692
-
693
-* The HTTP status code of a response is now set as the exception code of
694
-  RequestException objects.
695
-* 303 redirects will now correctly switch from POST to GET requests.
696
-* The default parallel adapter of a client now correctly uses the MultiAdapter.
697
-* HasDataTrait now initializes the internal data array as an empty array so
698
-  that the toArray() method always returns an array.
699
-
700
-## 4.0.0 - 2014-03-29
701
-
702
-* For information on changes and upgrading, see:
703
-  https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40
704
-* Added `GuzzleHttp\batch()` as a convenience function for sending requests in
705
-  parallel without needing to write asynchronous code.
706
-* Restructured how events are added to `GuzzleHttp\ClientInterface::sendAll()`.
707
-  You can now pass a callable or an array of associative arrays where each
708
-  associative array contains the "fn", "priority", and "once" keys.
709
-
710
-## 4.0.0.rc-2 - 2014-03-25
711
-
712
-* Removed `getConfig()` and `setConfig()` from clients to avoid confusion
713
-  around whether things like base_url, message_factory, etc. should be able to
714
-  be retrieved or modified.
715
-* Added `getDefaultOption()` and `setDefaultOption()` to ClientInterface
716
-* functions.php functions were renamed using snake_case to match PHP idioms
717
-* Added support for `HTTP_PROXY`, `HTTPS_PROXY`, and
718
-  `GUZZLE_CURL_SELECT_TIMEOUT` environment variables
719
-* Added the ability to specify custom `sendAll()` event priorities
720
-* Added the ability to specify custom stream context options to the stream
721
-  adapter.
722
-* Added a functions.php function for `get_path()` and `set_path()`
723
-* CurlAdapter and MultiAdapter now use a callable to generate curl resources
724
-* MockAdapter now properly reads a body and emits a `headers` event
725
-* Updated Url class to check if a scheme and host are set before adding ":"
726
-  and "//". This allows empty Url (e.g., "") to be serialized as "".
727
-* Parsing invalid XML no longer emits warnings
728
-* Curl classes now properly throw AdapterExceptions
729
-* Various performance optimizations
730
-* Streams are created with the faster `Stream\create()` function
731
-* Marked deprecation_proxy() as internal
732
-* Test server is now a collection of static methods on a class
733
-
734
-## 4.0.0-rc.1 - 2014-03-15
735
-
736
-* See https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40
737
-
738
-## 3.8.1 - 2014-01-28
739
-
740
-* Bug: Always using GET requests when redirecting from a 303 response
741
-* Bug: CURLOPT_SSL_VERIFYHOST is now correctly set to false when setting `$certificateAuthority` to false in
742
-  `Guzzle\Http\ClientInterface::setSslVerification()`
743
-* Bug: RedirectPlugin now uses strict RFC 3986 compliance when combining a base URL with a relative URL
744
-* Bug: The body of a request can now be set to `"0"`
745
-* Sending PHP stream requests no longer forces `HTTP/1.0`
746
-* Adding more information to ExceptionCollection exceptions so that users have more context, including a stack trace of
747
-  each sub-exception
748
-* Updated the `$ref` attribute in service descriptions to merge over any existing parameters of a schema (rather than
749
-  clobbering everything).
750
-* Merging URLs will now use the query string object from the relative URL (thus allowing custom query aggregators)
751
-* Query strings are now parsed in a way that they do no convert empty keys with no value to have a dangling `=`.
752
-  For example `foo&bar=baz` is now correctly parsed and recognized as `foo&bar=baz` rather than `foo=&bar=baz`.
753
-* Now properly escaping the regular expression delimiter when matching Cookie domains.
754
-* Network access is now disabled when loading XML documents
755
-
756
-## 3.8.0 - 2013-12-05
757
-
758
-* Added the ability to define a POST name for a file
759
-* JSON response parsing now properly walks additionalProperties
760
-* cURL error code 18 is now retried automatically in the BackoffPlugin
761
-* Fixed a cURL error when URLs contain fragments
762
-* Fixed an issue in the BackoffPlugin retry event where it was trying to access all exceptions as if they were
763
-  CurlExceptions
764
-* CURLOPT_PROGRESS function fix for PHP 5.5 (69fcc1e)
765
-* Added the ability for Guzzle to work with older versions of cURL that do not support `CURLOPT_TIMEOUT_MS`
766
-* Fixed a bug that was encountered when parsing empty header parameters
767
-* UriTemplate now has a `setRegex()` method to match the docs
768
-* The `debug` request parameter now checks if it is truthy rather than if it exists
769
-* Setting the `debug` request parameter to true shows verbose cURL output instead of using the LogPlugin
770
-* Added the ability to combine URLs using strict RFC 3986 compliance
771
-* Command objects can now return the validation errors encountered by the command
772
-* Various fixes to cache revalidation (#437 and 29797e5)
773
-* Various fixes to the AsyncPlugin
774
-* Cleaned up build scripts
775
-
776
-## 3.7.4 - 2013-10-02
777
-
778
-* Bug fix: 0 is now an allowed value in a description parameter that has a default value (#430)
779
-* Bug fix: SchemaFormatter now returns an integer when formatting to a Unix timestamp
780
-  (see https://github.com/aws/aws-sdk-php/issues/147)
781
-* Bug fix: Cleaned up and fixed URL dot segment removal to properly resolve internal dots
782
-* Minimum PHP version is now properly specified as 5.3.3 (up from 5.3.2) (#420)
783
-* Updated the bundled cacert.pem (#419)
784
-* OauthPlugin now supports adding authentication to headers or query string (#425)
785
-
786
-## 3.7.3 - 2013-09-08
787
-
788
-* Added the ability to get the exception associated with a request/command when using `MultiTransferException` and
789
-  `CommandTransferException`.
790
-* Setting `additionalParameters` of a response to false is now honored when parsing responses with a service description
791
-* Schemas are only injected into response models when explicitly configured.
792
-* No longer guessing Content-Type based on the path of a request. Content-Type is now only guessed based on the path of
793
-  an EntityBody.
794
-* Bug fix: ChunkedIterator can now properly chunk a \Traversable as well as an \Iterator.
795
-* Bug fix: FilterIterator now relies on `\Iterator` instead of `\Traversable`.
796
-* Bug fix: Gracefully handling malformed responses in RequestMediator::writeResponseBody()
797
-* Bug fix: Replaced call to canCache with canCacheRequest in the CallbackCanCacheStrategy of the CachePlugin
798
-* Bug fix: Visiting XML attributes first before visiting XML children when serializing requests
799
-* Bug fix: Properly parsing headers that contain commas contained in quotes
800
-* Bug fix: mimetype guessing based on a filename is now case-insensitive
801
-
802
-## 3.7.2 - 2013-08-02
803
-
804
-* Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander
805
-  See https://github.com/guzzle/guzzle/issues/371
806
-* Bug fix: Cookie domains are now matched correctly according to RFC 6265
807
-  See https://github.com/guzzle/guzzle/issues/377
808
-* Bug fix: GET parameters are now used when calculating an OAuth signature
809
-* Bug fix: Fixed an issue with cache revalidation where the If-None-Match header was being double quoted
810
-* `Guzzle\Common\AbstractHasDispatcher::dispatch()` now returns the event that was dispatched
811
-* `Guzzle\Http\QueryString::factory()` now guesses the most appropriate query aggregator to used based on the input.
812
-  See https://github.com/guzzle/guzzle/issues/379
813
-* Added a way to add custom domain objects to service description parsing using the `operation.parse_class` event. See
814
-  https://github.com/guzzle/guzzle/pull/380
815
-* cURL multi cleanup and optimizations
816
-
817
-## 3.7.1 - 2013-07-05
818
-
819
-* Bug fix: Setting default options on a client now works
820
-* Bug fix: Setting options on HEAD requests now works. See #352
821
-* Bug fix: Moving stream factory before send event to before building the stream. See #353
822
-* Bug fix: Cookies no longer match on IP addresses per RFC 6265
823
-* Bug fix: Correctly parsing header parameters that are in `<>` and quotes
824
-* Added `cert` and `ssl_key` as request options
825
-* `Host` header can now diverge from the host part of a URL if the header is set manually
826
-* `Guzzle\Service\Command\LocationVisitor\Request\XmlVisitor` was rewritten to change from using SimpleXML to XMLWriter
827
-* OAuth parameters are only added via the plugin if they aren't already set
828
-* Exceptions are now thrown when a URL cannot be parsed
829
-* Returning `false` if `Guzzle\Http\EntityBody::getContentMd5()` fails
830
-* Not setting a `Content-MD5` on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin
831
-
832
-## 3.7.0 - 2013-06-10
833
-
834
-* See UPGRADING.md for more information on how to upgrade.
835
-* Requests now support the ability to specify an array of $options when creating a request to more easily modify a
836
-  request. You can pass a 'request.options' configuration setting to a client to apply default request options to
837
-  every request created by a client (e.g. default query string variables, headers, curl options, etc.).
838
-* Added a static facade class that allows you to use Guzzle with static methods and mount the class to `\Guzzle`.
839
-  See `Guzzle\Http\StaticClient::mount`.
840
-* Added `command.request_options` to `Guzzle\Service\Command\AbstractCommand` to pass request options to requests
841
-      created by a command (e.g. custom headers, query string variables, timeout settings, etc.).
842
-* Stream size in `Guzzle\Stream\PhpStreamRequestFactory` will now be set if Content-Length is returned in the
843
-  headers of a response
844
-* Added `Guzzle\Common\Collection::setPath($path, $value)` to set a value into an array using a nested key
845
-  (e.g. `$collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];`)
846
-* ServiceBuilders now support storing and retrieving arbitrary data
847
-* CachePlugin can now purge all resources for a given URI
848
-* CachePlugin can automatically purge matching cached items when a non-idempotent request is sent to a resource
849
-* CachePlugin now uses the Vary header to determine if a resource is a cache hit
850
-* `Guzzle\Http\Message\Response` now implements `\Serializable`
851
-* Added `Guzzle\Cache\CacheAdapterFactory::fromCache()` to more easily create cache adapters
852
-* `Guzzle\Service\ClientInterface::execute()` now accepts an array, single command, or Traversable
853
-* Fixed a bug in `Guzzle\Http\Message\Header\Link::addLink()`
854
-* Better handling of calculating the size of a stream in `Guzzle\Stream\Stream` using fstat() and caching the size
855
-* `Guzzle\Common\Exception\ExceptionCollection` now creates a more readable exception message
856
-* Fixing BC break: Added back the MonologLogAdapter implementation rather than extending from PsrLog so that older
857
-  Symfony users can still use the old version of Monolog.
858
-* Fixing BC break: Added the implementation back in for `Guzzle\Http\Message\AbstractMessage::getTokenizedHeader()`.
859
-  Now triggering an E_USER_DEPRECATED warning when used. Use `$message->getHeader()->parseParams()`.
860
-* Several performance improvements to `Guzzle\Common\Collection`
861
-* Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`:
862
-  createRequest, head, delete, put, patch, post, options, prepareRequest
863
-* Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()`
864
-* Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface`
865
-* Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to
866
-  `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a
867
-  resource, string, or EntityBody into the $options parameter to specify the download location of the response.
868
-* Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a
869
-  default `array()`
870
-* Added `Guzzle\Stream\StreamInterface::isRepeatable`
871
-* Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use
872
-  $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or
873
-  $client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`.
874
-* Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers')`.
875
-* Removed `Guzzle\Http\ClientInterface::expandTemplate()`
876
-* Removed `Guzzle\Http\ClientInterface::setRequestFactory()`
877
-* Removed `Guzzle\Http\ClientInterface::getCurlMulti()`
878
-* Removed `Guzzle\Http\Message\RequestInterface::canCache`
879
-* Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`
880
-* Removed `Guzzle\Http\Message\RequestInterface::isRedirect`
881
-* Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods.
882
-* You can now enable E_USER_DEPRECATED warnings to see if you are using a deprecated method by setting
883
-  `Guzzle\Common\Version::$emitWarnings` to true.
884
-* Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use
885
-      `$request->getResponseBody()->isRepeatable()` instead.
886
-* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
887
-  `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
888
-* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
889
-  `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
890
-* Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.
891
-* Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.
892
-* Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated
893
-* Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand.
894
-  These will work through Guzzle 4.0
895
-* Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use [request.options][params].
896
-* Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client.
897
-* Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use $client->getConfig()->getPath('request.options/headers')`.
898
-* Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`.
899
-* Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.
900
-* Marked `Guzzle\Common\Collection::inject()` as deprecated.
901
-* Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');`
902
-* CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a
903
-  CacheStorageInterface. These two objects and interface will be removed in a future version.
904
-* Always setting X-cache headers on cached responses
905
-* Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin
906
-* `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface
907
-  $request, Response $response);`
908
-* `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`
909
-* `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`
910
-* Added `CacheStorageInterface::purge($url)`
911
-* `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin
912
-  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,
913
-  CanCacheStrategyInterface $canCache = null)`
914
-* Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`
915
-
916
-## 3.6.0 - 2013-05-29
917
-
918
-* ServiceDescription now implements ToArrayInterface
919
-* Added command.hidden_params to blacklist certain headers from being treated as additionalParameters
920
-* Guzzle can now correctly parse incomplete URLs
921
-* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.
922
-* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution
923
-* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().
924
-* Specific header implementations can be created for complex headers. When a message creates a header, it uses a
925
-  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and
926
-  CacheControl header implementation.
927
-* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate
928
-* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti()
929
-* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in
930
-  Guzzle\Http\Curl\RequestMediator
931
-* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.
932
-* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface
933
-* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders()
934
-* Removed Guzzle\Parser\ParserRegister::get(). Use getParser()
935
-* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser().
936
-* All response header helper functions return a string rather than mixing Header objects and strings inconsistently
937
-* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle
938
-  directly via interfaces
939
-* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist
940
-  but are a no-op until removed.
941
-* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a
942
-  `Guzzle\Service\Command\ArrayCommandInterface`.
943
-* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response
944
-  on a request while the request is still being transferred
945
-* The ability to case-insensitively search for header values
946
-* Guzzle\Http\Message\Header::hasExactHeader
947
-* Guzzle\Http\Message\Header::raw. Use getAll()
948
-* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object
949
-  instead.
950
-* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess
951
-* Added the ability to cast Model objects to a string to view debug information.
952
-
953
-## 3.5.0 - 2013-05-13
954
-
955
-* Bug: Fixed a regression so that request responses are parsed only once per oncomplete event rather than multiple times
956
-* Bug: Better cleanup of one-time events across the board (when an event is meant to fire once, it will now remove
957
-  itself from the EventDispatcher)
958
-* Bug: `Guzzle\Log\MessageFormatter` now properly writes "total_time" and "connect_time" values
959
-* Bug: Cloning an EntityEnclosingRequest now clones the EntityBody too
960
-* Bug: Fixed an undefined index error when parsing nested JSON responses with a sentAs parameter that reference a
961
-  non-existent key
962
-* Bug: All __call() method arguments are now required (helps with mocking frameworks)
963
-* Deprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference
964
-  to help with refcount based garbage collection of resources created by sending a request
965
-* Deprecating ZF1 cache and log adapters. These will be removed in the next major version.
966
-* Deprecating `Response::getPreviousResponse()` (method signature still exists, but it's deprecated). Use the
967
-  HistoryPlugin for a history.
968
-* Added a `responseBody` alias for the `response_body` location
969
-* Refactored internals to no longer rely on Response::getRequest()
970
-* HistoryPlugin can now be cast to a string
971
-* HistoryPlugin now logs transactions rather than requests and responses to more accurately keep track of the requests
972
-  and responses that are sent over the wire
973
-* Added `getEffectiveUrl()` and `getRedirectCount()` to Response objects
974
-
975
-## 3.4.3 - 2013-04-30
976
-
977
-* Bug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response
978
-* Added a check to re-extract the temp cacert bundle from the phar before sending each request
979
-
980
-## 3.4.2 - 2013-04-29
981
-
982
-* Bug fix: Stream objects now work correctly with "a" and "a+" modes
983
-* Bug fix: Removing `Transfer-Encoding: chunked` header when a Content-Length is present
984
-* Bug fix: AsyncPlugin no longer forces HEAD requests
985
-* Bug fix: DateTime timezones are now properly handled when using the service description schema formatter
986
-* Bug fix: CachePlugin now properly handles stale-if-error directives when a request to the origin server fails
987
-* Setting a response on a request will write to the custom request body from the response body if one is specified
988
-* LogPlugin now writes to php://output when STDERR is undefined
989
-* Added the ability to set multiple POST files for the same key in a single call
990
-* application/x-www-form-urlencoded POSTs now use the utf-8 charset by default
991
-* Added the ability to queue CurlExceptions to the MockPlugin
992
-* Cleaned up how manual responses are queued on requests (removed "queued_response" and now using request.before_send)
993
-* Configuration loading now allows remote files
994
-
995
-## 3.4.1 - 2013-04-16
996
-
997
-* Large refactoring to how CurlMulti handles work. There is now a proxy that sits in front of a pool of CurlMulti
998
-  handles. This greatly simplifies the implementation, fixes a couple bugs, and provides a small performance boost.
999
-* Exceptions are now properly grouped when sending requests in parallel
1000
-* Redirects are now properly aggregated when a multi transaction fails
1001
-* Redirects now set the response on the original object even in the event of a failure
1002
-* Bug fix: Model names are now properly set even when using $refs
1003
-* Added support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax
1004
-* Added support for oauth_callback in OAuth signatures
1005
-* Added support for oauth_verifier in OAuth signatures
1006
-* Added support to attempt to retrieve a command first literally, then ucfirst, the with inflection
1007
-
1008
-## 3.4.0 - 2013-04-11
1009
-
1010
-* Bug fix: URLs are now resolved correctly based on https://tools.ietf.org/html/rfc3986#section-5.2. #289
1011
-* Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289
1012
-* Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263
1013
-* Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264.
1014
-* Bug fix: Added `number` type to service descriptions.
1015
-* Bug fix: empty parameters are removed from an OAuth signature
1016
-* Bug fix: Revalidating a cache entry prefers the Last-Modified over the Date header
1017
-* Bug fix: Fixed "array to string" error when validating a union of types in a service description
1018
-* Bug fix: Removed code that attempted to determine the size of a stream when data is written to the stream
1019
-* Bug fix: Not including an `oauth_token` if the value is null in the OauthPlugin.
1020
-* Bug fix: Now correctly aggregating successful requests and failed requests in CurlMulti when a redirect occurs.
1021
-* The new default CURLOPT_TIMEOUT setting has been increased to 150 seconds so that Guzzle works on poor connections.
1022
-* Added a feature to EntityEnclosingRequest::setBody() that will automatically set the Content-Type of the request if
1023
-  the Content-Type can be determined based on the entity body or the path of the request.
1024
-* Added the ability to overwrite configuration settings in a client when grabbing a throwaway client from a builder.
1025
-* Added support for a PSR-3 LogAdapter.
1026
-* Added a `command.after_prepare` event
1027
-* Added `oauth_callback` parameter to the OauthPlugin
1028
-* Added the ability to create a custom stream class when using a stream factory
1029
-* Added a CachingEntityBody decorator
1030
-* Added support for `additionalParameters` in service descriptions to define how custom parameters are serialized.
1031
-* The bundled SSL certificate is now provided in the phar file and extracted when running Guzzle from a phar.
1032
-* You can now send any EntityEnclosingRequest with POST fields or POST files and cURL will handle creating bodies
1033
-* POST requests using a custom entity body are now treated exactly like PUT requests but with a custom cURL method. This
1034
-  means that the redirect behavior of POST requests with custom bodies will not be the same as POST requests that use
1035
-  POST fields or files (the latter is only used when emulating a form POST in the browser).
1036
-* Lots of cleanup to CurlHandle::factory and RequestFactory::createRequest
1037
-
1038
-## 3.3.1 - 2013-03-10
1039
-
1040
-* Added the ability to create PHP streaming responses from HTTP requests
1041
-* Bug fix: Running any filters when parsing response headers with service descriptions
1042
-* Bug fix: OauthPlugin fixes to allow for multi-dimensional array signing, and sorting parameters before signing
1043
-* Bug fix: Removed the adding of default empty arrays and false Booleans to responses in order to be consistent across
1044
-  response location visitors.
1045
-* Bug fix: Removed the possibility of creating configuration files with circular dependencies
1046
-* RequestFactory::create() now uses the key of a POST file when setting the POST file name
1047
-* Added xmlAllowEmpty to serialize an XML body even if no XML specific parameters are set
1048
-
1049
-## 3.3.0 - 2013-03-03
1050
-
1051
-* A large number of performance optimizations have been made
1052
-* Bug fix: Added 'wb' as a valid write mode for streams
1053
-* Bug fix: `Guzzle\Http\Message\Response::json()` now allows scalar values to be returned
1054
-* Bug fix: Fixed bug in `Guzzle\Http\Message\Response` where wrapping quotes were stripped from `getEtag()`
1055
-* BC: Removed `Guzzle\Http\Utils` class
1056
-* BC: Setting a service description on a client will no longer modify the client's command factories.
1057
-* BC: Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using
1058
-  the 'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'
1059
-* BC: `Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getSteamType()` are no longer converted to
1060
-  lowercase
1061
-* Operation parameter objects are now lazy loaded internally
1062
-* Added ErrorResponsePlugin that can throw errors for responses defined in service description operations' errorResponses
1063
-* Added support for instantiating responseType=class responseClass classes. Classes must implement
1064
-  `Guzzle\Service\Command\ResponseClassInterface`
1065
-* Added support for additionalProperties for top-level parameters in responseType=model responseClasses. These
1066
-  additional properties also support locations and can be used to parse JSON responses where the outermost part of the
1067
-  JSON is an array
1068
-* Added support for nested renaming of JSON models (rename sentAs to name)
1069
-* CachePlugin
1070
-    * Added support for stale-if-error so that the CachePlugin can now serve stale content from the cache on error
1071
-    * Debug headers can now added to cached response in the CachePlugin
1072
-
1073
-## 3.2.0 - 2013-02-14
1074
-
1075
-* CurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients.
1076
-* URLs with no path no longer contain a "/" by default
1077
-* Guzzle\Http\QueryString does no longer manages the leading "?". This is now handled in Guzzle\Http\Url.
1078
-* BadResponseException no longer includes the full request and response message
1079
-* Adding setData() to Guzzle\Service\Description\ServiceDescriptionInterface
1080
-* Adding getResponseBody() to Guzzle\Http\Message\RequestInterface
1081
-* Various updates to classes to use ServiceDescriptionInterface type hints rather than ServiceDescription
1082
-* Header values can now be normalized into distinct values when multiple headers are combined with a comma separated list
1083
-* xmlEncoding can now be customized for the XML declaration of a XML service description operation
1084
-* Guzzle\Http\QueryString now uses Guzzle\Http\QueryAggregator\QueryAggregatorInterface objects to add custom value
1085
-  aggregation and no longer uses callbacks
1086
-* The URL encoding implementation of Guzzle\Http\QueryString can now be customized
1087
-* Bug fix: Filters were not always invoked for array service description parameters
1088
-* Bug fix: Redirects now use a target response body rather than a temporary response body
1089
-* Bug fix: The default exponential backoff BackoffPlugin was not giving when the request threshold was exceeded
1090
-* Bug fix: Guzzle now takes the first found value when grabbing Cache-Control directives
1091
-
1092
-## 3.1.2 - 2013-01-27
1093
-
1094
-* Refactored how operation responses are parsed. Visitors now include a before() method responsible for parsing the
1095
-  response body. For example, the XmlVisitor now parses the XML response into an array in the before() method.
1096
-* Fixed an issue where cURL would not automatically decompress responses when the Accept-Encoding header was sent
1097
-* CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444)
1098
-* Fixed a bug where redirect responses were not chained correctly using getPreviousResponse()
1099
-* Setting default headers on a client after setting the user-agent will not erase the user-agent setting
1100
-
1101
-## 3.1.1 - 2013-01-20
1102
-
1103
-* Adding wildcard support to Guzzle\Common\Collection::getPath()
1104
-* Adding alias support to ServiceBuilder configs
1105
-* Adding Guzzle\Service\Resource\CompositeResourceIteratorFactory and cleaning up factory interface
1106
-
1107
-## 3.1.0 - 2013-01-12
1108
-
1109
-* BC: CurlException now extends from RequestException rather than BadResponseException
1110
-* BC: Renamed Guzzle\Plugin\Cache\CanCacheStrategyInterface::canCache() to canCacheRequest() and added CanCacheResponse()
1111
-* Added getData to ServiceDescriptionInterface
1112
-* Added context array to RequestInterface::setState()
1113
-* Bug: Removing hard dependency on the BackoffPlugin from Guzzle\Http
1114
-* Bug: Adding required content-type when JSON request visitor adds JSON to a command
1115
-* Bug: Fixing the serialization of a service description with custom data
1116
-* Made it easier to deal with exceptions thrown when transferring commands or requests in parallel by providing
1117
-  an array of successful and failed responses
1118
-* Moved getPath from Guzzle\Service\Resource\Model to Guzzle\Common\Collection
1119
-* Added Guzzle\Http\IoEmittingEntityBody
1120
-* Moved command filtration from validators to location visitors
1121
-* Added `extends` attributes to service description parameters
1122
-* Added getModels to ServiceDescriptionInterface
1123
-
1124
-## 3.0.7 - 2012-12-19
1125
-
1126
-* Fixing phar detection when forcing a cacert to system if null or true
1127
-* Allowing filename to be passed to `Guzzle\Http\Message\Request::setResponseBody()`
1128
-* Cleaning up `Guzzle\Common\Collection::inject` method
1129
-* Adding a response_body location to service descriptions
1130
-
1131
-## 3.0.6 - 2012-12-09
1132
-
1133
-* CurlMulti performance improvements
1134
-* Adding setErrorResponses() to Operation
1135
-* composer.json tweaks
1136
-
1137
-## 3.0.5 - 2012-11-18
1138
-
1139
-* Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin
1140
-* Bug: Response body can now be a string containing "0"
1141
-* Bug: Using Guzzle inside of a phar uses system by default but now allows for a custom cacert
1142
-* Bug: QueryString::fromString now properly parses query string parameters that contain equal signs
1143
-* Added support for XML attributes in service description responses
1144
-* DefaultRequestSerializer now supports array URI parameter values for URI template expansion
1145
-* Added better mimetype guessing to requests and post files
1146
-
1147
-## 3.0.4 - 2012-11-11
1148
-
1149
-* Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value
1150
-* Bug: Cookies can now be added that have a name, domain, or value set to "0"
1151
-* Bug: Using the system cacert bundle when using the Phar
1152
-* Added json and xml methods to Response to make it easier to parse JSON and XML response data into data structures
1153
-* Enhanced cookie jar de-duplication
1154
-* Added the ability to enable strict cookie jars that throw exceptions when invalid cookies are added
1155
-* Added setStream to StreamInterface to actually make it possible to implement custom rewind behavior for entity bodies
1156
-* Added the ability to create any sort of hash for a stream rather than just an MD5 hash
1157
-
1158
-## 3.0.3 - 2012-11-04
1159
-
1160
-* Implementing redirects in PHP rather than cURL
1161
-* Added PECL URI template extension and using as default parser if available
1162
-* Bug: Fixed Content-Length parsing of Response factory
1163
-* Adding rewind() method to entity bodies and streams. Allows for custom rewinding of non-repeatable streams.
1164
-* Adding ToArrayInterface throughout library
1165
-* Fixing OauthPlugin to create unique nonce values per request
1166
-
1167
-## 3.0.2 - 2012-10-25
1168
-
1169
-* Magic methods are enabled by default on clients
1170
-* Magic methods return the result of a command
1171
-* Service clients no longer require a base_url option in the factory
1172
-* Bug: Fixed an issue with URI templates where null template variables were being expanded
1173
-
1174
-## 3.0.1 - 2012-10-22
1175
-
1176
-* Models can now be used like regular collection objects by calling filter, map, etc.
1177
-* Models no longer require a Parameter structure or initial data in the constructor
1178
-* Added a custom AppendIterator to get around a PHP bug with the `\AppendIterator`
1179
-
1180
-## 3.0.0 - 2012-10-15
1181
-
1182
-* Rewrote service description format to be based on Swagger
1183
-    * Now based on JSON schema
1184
-    * Added nested input structures and nested response models
1185
-    * Support for JSON and XML input and output models
1186
-    * Renamed `commands` to `operations`
1187
-    * Removed dot class notation
1188
-    * Removed custom types
1189
-* Broke the project into smaller top-level namespaces to be more component friendly
1190
-* Removed support for XML configs and descriptions. Use arrays or JSON files.
1191
-* Removed the Validation component and Inspector
1192
-* Moved all cookie code to Guzzle\Plugin\Cookie
1193
-* Magic methods on a Guzzle\Service\Client now return the command un-executed.
1194
-* Calling getResult() or getResponse() on a command will lazily execute the command if needed.
1195
-* Now shipping with cURL's CA certs and using it by default
1196
-* Added previousResponse() method to response objects
1197
-* No longer sending Accept and Accept-Encoding headers on every request
1198
-* Only sending an Expect header by default when a payload is greater than 1MB
1199
-* Added/moved client options:
1200
-    * curl.blacklist to curl.option.blacklist
1201
-    * Added ssl.certificate_authority
1202
-* Added a Guzzle\Iterator component
1203
-* Moved plugins from Guzzle\Http\Plugin to Guzzle\Plugin
1204
-* Added a more robust backoff retry strategy (replaced the ExponentialBackoffPlugin)
1205
-* Added a more robust caching plugin
1206
-* Added setBody to response objects
1207
-* Updating LogPlugin to use a more flexible MessageFormatter
1208
-* Added a completely revamped build process
1209
-* Cleaning up Collection class and removing default values from the get method
1210
-* Fixed ZF2 cache adapters
1211
-
1212
-## 2.8.8 - 2012-10-15
1213
-
1214
-* Bug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did
1215
-
1216
-## 2.8.7 - 2012-09-30
1217
-
1218
-* Bug: Fixed config file aliases for JSON includes
1219
-* Bug: Fixed cookie bug on a request object by using CookieParser to parse cookies on requests
1220
-* Bug: Removing the path to a file when sending a Content-Disposition header on a POST upload
1221
-* Bug: Hardening request and response parsing to account for missing parts
1222
-* Bug: Fixed PEAR packaging
1223
-* Bug: Fixed Request::getInfo
1224
-* Bug: Fixed cases where CURLM_CALL_MULTI_PERFORM return codes were causing curl transactions to fail
1225
-* Adding the ability for the namespace Iterator factory to look in multiple directories
1226
-* Added more getters/setters/removers from service descriptions
1227
-* Added the ability to remove POST fields from OAuth signatures
1228
-* OAuth plugin now supports 2-legged OAuth
1229
-
1230
-## 2.8.6 - 2012-09-05
1231
-
1232
-* Added the ability to modify and build service descriptions
1233
-* Added the use of visitors to apply parameters to locations in service descriptions using the dynamic command
1234
-* Added a `json` parameter location
1235
-* Now allowing dot notation for classes in the CacheAdapterFactory
1236
-* Using the union of two arrays rather than an array_merge when extending service builder services and service params
1237
-* Ensuring that a service is a string before doing strpos() checks on it when substituting services for references
1238
-  in service builder config files.
1239
-* Services defined in two different config files that include one another will by default replace the previously
1240
-  defined service, but you can now create services that extend themselves and merge their settings over the previous
1241
-* The JsonLoader now supports aliasing filenames with different filenames. This allows you to alias something like
1242
-  '_default' with a default JSON configuration file.
1243
-
1244
-## 2.8.5 - 2012-08-29
1245
-
1246
-* Bug: Suppressed empty arrays from URI templates
1247
-* Bug: Added the missing $options argument from ServiceDescription::factory to enable caching
1248
-* Added support for HTTP responses that do not contain a reason phrase in the start-line
1249
-* AbstractCommand commands are now invokable
1250
-* Added a way to get the data used when signing an Oauth request before a request is sent
1251
-
1252
-## 2.8.4 - 2012-08-15
1253
-
1254
-* Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin
1255
-* Added the ability to transfer entity bodies as a string rather than streamed. This gets around curl error 65. Set `body_as_string` in a request's curl options to enable.
1256
-* Added a StreamInterface, EntityBodyInterface, and added ftell() to Guzzle\Common\Stream
1257
-* Added an AbstractEntityBodyDecorator and a ReadLimitEntityBody decorator to transfer only a subset of a decorated stream
1258
-* Stream and EntityBody objects will now return the file position to the previous position after a read required operation (e.g. getContentMd5())
1259
-* Added additional response status codes
1260
-* Removed SSL information from the default User-Agent header
1261
-* DELETE requests can now send an entity body
1262
-* Added an EventDispatcher to the ExponentialBackoffPlugin and added an ExponentialBackoffLogger to log backoff retries
1263
-* Added the ability of the MockPlugin to consume mocked request bodies
1264
-* LogPlugin now exposes request and response objects in the extras array
1265
-
1266
-## 2.8.3 - 2012-07-30
1267
-
1268
-* Bug: Fixed a case where empty POST requests were sent as GET requests
1269
-* Bug: Fixed a bug in ExponentialBackoffPlugin that caused fatal errors when retrying an EntityEnclosingRequest that does not have a body
1270
-* Bug: Setting the response body of a request to null after completing a request, not when setting the state of a request to new
1271
-* Added multiple inheritance to service description commands
1272
-* Added an ApiCommandInterface and added `getParamNames()` and `hasParam()`
1273
-* Removed the default 2mb size cutoff from the Md5ValidatorPlugin so that it now defaults to validating everything
1274
-* Changed CurlMulti::perform to pass a smaller timeout to CurlMulti::executeHandles
1275
-
1276
-## 2.8.2 - 2012-07-24
1277
-
1278
-* Bug: Query string values set to 0 are no longer dropped from the query string
1279
-* Bug: A Collection object is no longer created each time a call is made to `Guzzle\Service\Command\AbstractCommand::getRequestHeaders()`
1280
-* Bug: `+` is now treated as an encoded space when parsing query strings
1281
-* QueryString and Collection performance improvements
1282
-* Allowing dot notation for class paths in filters attribute of a service descriptions
1283
-
1284
-## 2.8.1 - 2012-07-16
1285
-
1286
-* Loosening Event Dispatcher dependency
1287
-* POST redirects can now be customized using CURLOPT_POSTREDIR
1288
-
1289
-## 2.8.0 - 2012-07-15
1290
-
1291
-* BC: Guzzle\Http\Query
1292
-    * Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl)
1293
-    * Changed isEncodingValues() and isEncodingFields() to isUrlEncoding()
1294
-    * Changed setEncodeValues(bool) and setEncodeFields(bool) to useUrlEncoding(bool)
1295
-    * Changed the aggregation functions of QueryString to be static methods
1296
-    * Can now use fromString() with querystrings that have a leading ?
1297
-* cURL configuration values can be specified in service descriptions using `curl.` prefixed parameters
1298
-* Content-Length is set to 0 before emitting the request.before_send event when sending an empty request body
1299
-* Cookies are no longer URL decoded by default
1300
-* Bug: URI template variables set to null are no longer expanded
1301
-
1302
-## 2.7.2 - 2012-07-02
1303
-
1304
-* BC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\Http\Parser to Guzzle\Parser.
1305
-* BC: Removing Guzzle\Common\Batch\Batch::count() and replacing it with isEmpty()
1306
-* CachePlugin now allows for a custom request parameter function to check if a request can be cached
1307
-* Bug fix: CachePlugin now only caches GET and HEAD requests by default
1308
-* Bug fix: Using header glue when transferring headers over the wire
1309
-* Allowing deeply nested arrays for composite variables in URI templates
1310
-* Batch divisors can now return iterators or arrays
1311
-
1312
-## 2.7.1 - 2012-06-26
1313
-
1314
-* Minor patch to update version number in UA string
1315
-* Updating build process
1316
-
1317
-## 2.7.0 - 2012-06-25
1318
-
1319
-* BC: Inflection classes moved to Guzzle\Inflection. No longer static methods. Can now inject custom inflectors into classes.
1320
-* BC: Removed magic setX methods from commands
1321
-* BC: Magic methods mapped to service description commands are now inflected in the command factory rather than the client __call() method
1322
-* Verbose cURL options are no longer enabled by default. Set curl.debug to true on a client to enable.
1323
-* Bug: Now allowing colons in a response start-line (e.g. HTTP/1.1 503 Service Unavailable: Back-end server is at capacity)
1324
-* Guzzle\Service\Resource\ResourceIteratorApplyBatched now internally uses the Guzzle\Common\Batch namespace
1325
-* Added Guzzle\Service\Plugin namespace and a PluginCollectionPlugin
1326
-* Added the ability to set POST fields and files in a service description
1327
-* Guzzle\Http\EntityBody::factory() now accepts objects with a __toString() method
1328
-* Adding a command.before_prepare event to clients
1329
-* Added BatchClosureTransfer and BatchClosureDivisor
1330
-* BatchTransferException now includes references to the batch divisor and transfer strategies
1331
-* Fixed some tests so that they pass more reliably
1332
-* Added Guzzle\Common\Log\ArrayLogAdapter
1333
-
1334
-## 2.6.6 - 2012-06-10
1335
-
1336
-* BC: Removing Guzzle\Http\Plugin\BatchQueuePlugin
1337
-* BC: Removing Guzzle\Service\Command\CommandSet
1338
-* Adding generic batching system (replaces the batch queue plugin and command set)
1339
-* Updating ZF cache and log adapters and now using ZF's composer repository
1340
-* Bug: Setting the name of each ApiParam when creating through an ApiCommand
1341
-* Adding result_type, result_doc, deprecated, and doc_url to service descriptions
1342
-* Bug: Changed the default cookie header casing back to 'Cookie'
1343
-
1344
-## 2.6.5 - 2012-06-03
1345
-
1346
-* BC: Renaming Guzzle\Http\Message\RequestInterface::getResourceUri() to getResource()
1347
-* BC: Removing unused AUTH_BASIC and AUTH_DIGEST constants from
1348
-* BC: Guzzle\Http\Cookie is now used to manage Set-Cookie data, not Cookie data
1349
-* BC: Renaming methods in the CookieJarInterface
1350
-* Moving almost all cookie logic out of the CookiePlugin and into the Cookie or CookieJar implementations
1351
-* Making the default glue for HTTP headers ';' instead of ','
1352
-* Adding a removeValue to Guzzle\Http\Message\Header
1353
-* Adding getCookies() to request interface.
1354
-* Making it easier to add event subscribers to HasDispatcherInterface classes. Can now directly call addSubscriber()
1355
-
1356
-## 2.6.4 - 2012-05-30
1357
-
1358
-* BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class.
1359
-* BC: Moving ApiCommand specific functionality from the Inspector and on to the ApiCommand
1360
-* Bug: Fixing magic method command calls on clients
1361
-* Bug: Email constraint only validates strings
1362
-* Bug: Aggregate POST fields when POST files are present in curl handle
1363
-* Bug: Fixing default User-Agent header
1364
-* Bug: Only appending or prepending parameters in commands if they are specified
1365
-* Bug: Not requiring response reason phrases or status codes to match a predefined list of codes
1366
-* Allowing the use of dot notation for class namespaces when using instance_of constraint
1367
-* Added any_match validation constraint
1368
-* Added an AsyncPlugin
1369
-* Passing request object to the calculateWait method of the ExponentialBackoffPlugin
1370
-* Allowing the result of a command object to be changed
1371
-* Parsing location and type sub values when instantiating a service description rather than over and over at runtime
1372
-
1373
-## 2.6.3 - 2012-05-23
1374
-
1375
-* [BC] Guzzle\Common\FromConfigInterface no longer requires any config options.
1376
-* [BC] Refactoring how POST files are stored on an EntityEnclosingRequest. They are now separate from POST fields.
1377
-* You can now use an array of data when creating PUT request bodies in the request factory.
1378
-* Removing the requirement that HTTPS requests needed a Cache-Control: public directive to be cacheable.
1379
-* [Http] Adding support for Content-Type in multipart POST uploads per upload
1380
-* [Http] Added support for uploading multiple files using the same name (foo[0], foo[1])
1381
-* Adding more POST data operations for easier manipulation of POST data.
1382
-* You can now set empty POST fields.
1383
-* The body of a request is only shown on EntityEnclosingRequest objects that do not use POST files.
1384
-* Split the Guzzle\Service\Inspector::validateConfig method into two methods. One to initialize when a command is created, and one to validate.
1385
-* CS updates
1386
-
1387
-## 2.6.2 - 2012-05-19
1388
-
1389
-* [Http] Better handling of nested scope requests in CurlMulti.  Requests are now always prepares in the send() method rather than the addRequest() method.
1390
-
1391
-## 2.6.1 - 2012-05-19
1392
-
1393
-* [BC] Removing 'path' support in service descriptions.  Use 'uri'.
1394
-* [BC] Guzzle\Service\Inspector::parseDocBlock is now protected. Adding getApiParamsForClass() with cache.
1395
-* [BC] Removing Guzzle\Common\NullObject.  Use https://github.com/mtdowling/NullObject if you need it.
1396
-* [BC] Removing Guzzle\Common\XmlElement.
1397
-* All commands, both dynamic and concrete, have ApiCommand objects.
1398
-* Adding a fix for CurlMulti so that if all of the connections encounter some sort of curl error, then the loop exits.
1399
-* Adding checks to EntityEnclosingRequest so that empty POST files and fields are ignored.
1400
-* Making the method signature of Guzzle\Service\Builder\ServiceBuilder::factory more flexible.
1401
-
1402
-## 2.6.0 - 2012-05-15
1403
-
1404
-* [BC] Moving Guzzle\Service\Builder to Guzzle\Service\Builder\ServiceBuilder
1405
-* [BC] Executing a Command returns the result of the command rather than the command
1406
-* [BC] Moving all HTTP parsing logic to Guzzle\Http\Parsers. Allows for faster C implementations if needed.
1407
-* [BC] Changing the Guzzle\Http\Message\Response::setProtocol() method to accept a protocol and version in separate args.
1408
-* [BC] Moving ResourceIterator* to Guzzle\Service\Resource
1409
-* [BC] Completely refactored ResourceIterators to iterate over a cloned command object
1410
-* [BC] Moved Guzzle\Http\UriTemplate to Guzzle\Http\Parser\UriTemplate\UriTemplate
1411
-* [BC] Guzzle\Guzzle is now deprecated
1412
-* Moving Guzzle\Common\Guzzle::inject to Guzzle\Common\Collection::inject
1413
-* Adding Guzzle\Version class to give version information about Guzzle
1414
-* Adding Guzzle\Http\Utils class to provide getDefaultUserAgent() and getHttpDate()
1415
-* Adding Guzzle\Curl\CurlVersion to manage caching curl_version() data
1416
-* ServiceDescription and ServiceBuilder are now cacheable using similar configs
1417
-* Changing the format of XML and JSON service builder configs.  Backwards compatible.
1418
-* Cleaned up Cookie parsing
1419
-* Trimming the default Guzzle User-Agent header
1420
-* Adding a setOnComplete() method to Commands that is called when a command completes
1421
-* Keeping track of requests that were mocked in the MockPlugin
1422
-* Fixed a caching bug in the CacheAdapterFactory
1423
-* Inspector objects can be injected into a Command object
1424
-* Refactoring a lot of code and tests to be case insensitive when dealing with headers
1425
-* Adding Guzzle\Http\Message\HeaderComparison for easy comparison of HTTP headers using a DSL
1426
-* Adding the ability to set global option overrides to service builder configs
1427
-* Adding the ability to include other service builder config files from within XML and JSON files
1428
-* Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method.
1429
-
1430
-## 2.5.0 - 2012-05-08
1431
-
1432
-* Major performance improvements
1433
-* [BC] Simplifying Guzzle\Common\Collection.  Please check to see if you are using features that are now deprecated.
1434
-* [BC] Using a custom validation system that allows a flyweight implementation for much faster validation. No longer using Symfony2 Validation component.
1435
-* [BC] No longer supporting "{{ }}" for injecting into command or UriTemplates.  Use "{}"
1436
-* Added the ability to passed parameters to all requests created by a client
1437
-* Added callback functionality to the ExponentialBackoffPlugin
1438
-* Using microtime in ExponentialBackoffPlugin to allow more granular backoff strategies.
1439
-* Rewinding request stream bodies when retrying requests
1440
-* Exception is thrown when JSON response body cannot be decoded
1441
-* Added configurable magic method calls to clients and commands.  This is off by default.
1442
-* Fixed a defect that added a hash to every parsed URL part
1443
-* Fixed duplicate none generation for OauthPlugin.
1444
-* Emitting an event each time a client is generated by a ServiceBuilder
1445
-* Using an ApiParams object instead of a Collection for parameters of an ApiCommand
1446
-* cache.* request parameters should be renamed to params.cache.*
1447
-* Added the ability to set arbitrary curl options on requests (disable_wire, progress, etc.). See CurlHandle.
1448
-* Added the ability to disable type validation of service descriptions
1449
-* ServiceDescriptions and ServiceBuilders are now Serializable
Browse code

Added README.md appinfo/info.xml appinfo/signature.json lib/Controller/AuthorApiController.php and the providers directory

DoubleBastionAdmin authored on 20/08/2022 16:33:00
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,1450 @@
1
+# Change Log
2
+
3
+Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.
4
+
5
+## 7.2.0 - 2020-10-10
6
+
7
+### Added
8
+
9
+- Support for PHP 8 [#2712](https://github.com/guzzle/guzzle/pull/2712), [#2715](https://github.com/guzzle/guzzle/pull/2715), [#2789](https://github.com/guzzle/guzzle/pull/2789)
10
+- Support passing a body summarizer to the http errors middleware [#2795](https://github.com/guzzle/guzzle/pull/2795)
11
+
12
+### Fixed
13
+
14
+- Handle exceptions during response creation [#2591](https://github.com/guzzle/guzzle/pull/2591)
15
+- Fix CURLOPT_ENCODING not to be overwritten [#2595](https://github.com/guzzle/guzzle/pull/2595)
16
+- Make sure the Request always has a body object [#2804](https://github.com/guzzle/guzzle/pull/2804)
17
+
18
+### Changed
19
+
20
+- The `TooManyRedirectsException` has a response [#2660](https://github.com/guzzle/guzzle/pull/2660)
21
+- Avoid "functions" from dependencies [#2712](https://github.com/guzzle/guzzle/pull/2712)
22
+
23
+### Deprecated
24
+
25
+- Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786)
26
+
27
+## 7.1.1 - 2020-09-30
28
+
29
+### Fixed
30
+
31
+- Incorrect EOF detection for response body streams on Windows.
32
+
33
+### Changed
34
+
35
+- We dont connect curl `sink` on HEAD requests.
36
+- Removed some PHP 5 workarounds
37
+
38
+## 7.1.0 - 2020-09-22
39
+
40
+### Added
41
+
42
+- `GuzzleHttp\MessageFormatterInterface`
43
+
44
+### Fixed
45
+
46
+- Fixed issue that caused cookies with no value not to be stored.
47
+- On redirects, we allow all safe methods like GET, HEAD and OPTIONS.
48
+- Fixed logging on empty responses.
49
+- Make sure MessageFormatter::format returns string
50
+
51
+### Deprecated
52
+
53
+- All functions in `GuzzleHttp` has been deprecated. Use static methods on `Utils` instead.
54
+- `ClientInterface::getConfig()`
55
+- `Client::getConfig()`
56
+- `Client::__call()`
57
+- `Utils::defaultCaBundle()`
58
+- `CurlFactory::LOW_CURL_VERSION_NUMBER`
59
+
60
+## 7.0.1 - 2020-06-27
61
+
62
+* Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699)
63
+
64
+## 7.0.0 - 2020-06-27
65
+
66
+No changes since 7.0.0-rc1.
67
+
68
+## 7.0.0-rc1 - 2020-06-15
69
+
70
+### Changed
71
+
72
+* Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629)
73
+* Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675)
74
+
75
+## 7.0.0-beta2 - 2020-05-25
76
+
77
+### Added
78
+
79
+* Using `Utils` class instead of functions in the `GuzzleHttp` namespace. [#2546](https://github.com/guzzle/guzzle/pull/2546)
80
+* `ClientInterface::MAJOR_VERSION` [#2583](https://github.com/guzzle/guzzle/pull/2583)
81
+
82
+### Changed
83
+
84
+* Avoid the `getenv` function when unsafe [#2531](https://github.com/guzzle/guzzle/pull/2531)
85
+* Added real client methods [#2529](https://github.com/guzzle/guzzle/pull/2529)
86
+* Avoid functions due to global install conflicts [#2546](https://github.com/guzzle/guzzle/pull/2546)
87
+* Use Symfony intl-idn polyfill [#2550](https://github.com/guzzle/guzzle/pull/2550)
88
+* Adding methods for HTTP verbs like `Client::get()`, `Client::head()`, `Client::patch()` etc [#2529](https://github.com/guzzle/guzzle/pull/2529)
89
+* `ConnectException` extends `TransferException` [#2541](https://github.com/guzzle/guzzle/pull/2541)
90
+* Updated the default User Agent to "GuzzleHttp/7" [#2654](https://github.com/guzzle/guzzle/pull/2654)
91
+
92
+### Fixed
93
+
94
+* Various intl icu issues [#2626](https://github.com/guzzle/guzzle/pull/2626)
95
+
96
+### Removed
97
+
98
+* Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528)
99
+
100
+## 7.0.0-beta1 - 2019-12-30
101
+
102
+The diff might look very big but 95% of Guzzle users will be able to upgrade without modification.
103
+Please see [the upgrade document](UPGRADING.md) that describes all BC breaking changes.
104
+
105
+### Added
106
+
107
+* Implement PSR-18 and dropped PHP 5 support [#2421](https://github.com/guzzle/guzzle/pull/2421) [#2474](https://github.com/guzzle/guzzle/pull/2474)
108
+* PHP 7 types [#2442](https://github.com/guzzle/guzzle/pull/2442) [#2449](https://github.com/guzzle/guzzle/pull/2449) [#2466](https://github.com/guzzle/guzzle/pull/2466) [#2497](https://github.com/guzzle/guzzle/pull/2497) [#2499](https://github.com/guzzle/guzzle/pull/2499)
109
+* IDN support for redirects [2424](https://github.com/guzzle/guzzle/pull/2424)
110
+
111
+### Changed
112
+
113
+* Dont allow passing null as third argument to `BadResponseException::__construct()` [#2427](https://github.com/guzzle/guzzle/pull/2427)
114
+* Use SAPI constant instead of method call [#2450](https://github.com/guzzle/guzzle/pull/2450)
115
+* Use native function invocation [#2444](https://github.com/guzzle/guzzle/pull/2444)
116
+* Better defaults for PHP installations with old ICU lib [2454](https://github.com/guzzle/guzzle/pull/2454)
117
+* Added visibility to all constants [#2462](https://github.com/guzzle/guzzle/pull/2462)
118
+* Dont allow passing `null` as URI to `Client::request()` and `Client::requestAsync()` [#2461](https://github.com/guzzle/guzzle/pull/2461)
119
+* Widen the exception argument to throwable [#2495](https://github.com/guzzle/guzzle/pull/2495)
120
+
121
+### Fixed
122
+
123
+* Logging when Promise rejected with a string [#2311](https://github.com/guzzle/guzzle/pull/2311)
124
+
125
+### Removed
126
+
127
+* Class `SeekException` [#2162](https://github.com/guzzle/guzzle/pull/2162)
128
+* `RequestException::getResponseBodySummary()` [#2425](https://github.com/guzzle/guzzle/pull/2425)
129
+* `CookieJar::getCookieValue()` [#2433](https://github.com/guzzle/guzzle/pull/2433)
130
+* `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440)
131
+* Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464)
132
+
133
+## 6.5.2 - 2019-12-23
134
+
135
+* idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489)
136
+
137
+## 6.5.1 - 2019-12-21
138
+
139
+* Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454)
140
+* IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424)
141
+
142
+## 6.5.0 - 2019-12-07
143
+
144
+* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143)
145
+* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287)
146
+* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132)
147
+* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132)
148
+* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348)
149
+* Deprecated `ClientInterface::VERSION`
150
+
151
+## 6.4.1 - 2019-10-23
152
+
153
+* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that
154
+* Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar`
155
+
156
+## 6.4.0 - 2019-10-23
157
+
158
+* Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108)
159
+* Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [#2081](https://github.com/guzzle/guzzle/pull/2081)
160
+* Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [#2161](https://github.com/guzzle/guzzle/pull/2161)
161
+* Improvement: Added `GuzzleHttp\Exception\InvalidArgumentException` [#2163](https://github.com/guzzle/guzzle/pull/2163)
162
+* Improvement: Added `GuzzleHttp\_current_time()` to use `hrtime()` if that function exists. [#2242](https://github.com/guzzle/guzzle/pull/2242)
163
+* Improvement: Added curl's `appconnect_time` in `TransferStats` [#2284](https://github.com/guzzle/guzzle/pull/2284)
164
+* Improvement: Make GuzzleException extend Throwable wherever it's available [#2273](https://github.com/guzzle/guzzle/pull/2273)
165
+* Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335)
166
+* Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362)
167
+
168
+## 6.3.3 - 2018-04-22
169
+
170
+* Fix: Default headers when decode_content is specified
171
+
172
+
173
+## 6.3.2 - 2018-03-26
174
+
175
+* Fix: Release process
176
+
177
+
178
+## 6.3.1 - 2018-03-26
179
+
180
+* Bug fix: Parsing 0 epoch expiry times in cookies [#2014](https://github.com/guzzle/guzzle/pull/2014)
181
+* Improvement: Better ConnectException detection [#2012](https://github.com/guzzle/guzzle/pull/2012)
182
+* Bug fix: Malformed domain that contains a "/" [#1999](https://github.com/guzzle/guzzle/pull/1999)
183
+* Bug fix: Undefined offset when a cookie has no first key-value pair [#1998](https://github.com/guzzle/guzzle/pull/1998)
184
+* Improvement: Support PHPUnit 6 [#1953](https://github.com/guzzle/guzzle/pull/1953)
185
+* Bug fix: Support empty headers [#1915](https://github.com/guzzle/guzzle/pull/1915)
186
+* Bug fix: Ignore case during header modifications [#1916](https://github.com/guzzle/guzzle/pull/1916)
187
+
188
++ Minor code cleanups, documentation fixes and clarifications.
189
+
190
+
191
+## 6.3.0 - 2017-06-22
192
+
193
+* Feature: force IP resolution (ipv4 or ipv6) [#1608](https://github.com/guzzle/guzzle/pull/1608), [#1659](https://github.com/guzzle/guzzle/pull/1659)
194
+* Improvement: Don't include summary in exception message when body is empty [#1621](https://github.com/guzzle/guzzle/pull/1621)
195
+* Improvement: Handle `on_headers` option in MockHandler [#1580](https://github.com/guzzle/guzzle/pull/1580)
196
+* Improvement: Added SUSE Linux CA path [#1609](https://github.com/guzzle/guzzle/issues/1609)
197
+* Improvement: Use class reference for getting the name of the class instead of using hardcoded strings [#1641](https://github.com/guzzle/guzzle/pull/1641)
198
+* Feature: Added `read_timeout` option [#1611](https://github.com/guzzle/guzzle/pull/1611)
199
+* Bug fix: PHP 7.x fixes [#1685](https://github.com/guzzle/guzzle/pull/1685), [#1686](https://github.com/guzzle/guzzle/pull/1686), [#1811](https://github.com/guzzle/guzzle/pull/1811)
200
+* Deprecation: BadResponseException instantiation without a response [#1642](https://github.com/guzzle/guzzle/pull/1642)
201
+* Feature: Added NTLM auth [#1569](https://github.com/guzzle/guzzle/pull/1569)
202
+* Feature: Track redirect HTTP status codes [#1711](https://github.com/guzzle/guzzle/pull/1711)
203
+* Improvement: Check handler type during construction [#1745](https://github.com/guzzle/guzzle/pull/1745)
204
+* Improvement: Always include the Content-Length if there's a body [#1721](https://github.com/guzzle/guzzle/pull/1721)
205
+* Feature: Added convenience method to access a cookie by name [#1318](https://github.com/guzzle/guzzle/pull/1318)
206
+* Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684)
207
+* Improvement:  	Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827)
208
+
209
+
210
++ Minor code cleanups, documentation fixes and clarifications.
211
+
212
+## 6.2.3 - 2017-02-28
213
+
214
+* Fix deprecations with guzzle/psr7 version 1.4
215
+
216
+## 6.2.2 - 2016-10-08
217
+
218
+* Allow to pass nullable Response to delay callable
219
+* Only add scheme when host is present
220
+* Fix drain case where content-length is the literal string zero
221
+* Obfuscate in-URL credentials in exceptions
222
+
223
+## 6.2.1 - 2016-07-18
224
+
225
+* Address HTTP_PROXY security vulnerability, CVE-2016-5385:
226
+  https://httpoxy.org/
227
+* Fixing timeout bug with StreamHandler:
228
+  https://github.com/guzzle/guzzle/pull/1488
229
+* Only read up to `Content-Length` in PHP StreamHandler to avoid timeouts when
230
+  a server does not honor `Connection: close`.
231
+* Ignore URI fragment when sending requests.
232
+
233
+## 6.2.0 - 2016-03-21
234
+
235
+* Feature: added `GuzzleHttp\json_encode` and `GuzzleHttp\json_decode`.
236
+  https://github.com/guzzle/guzzle/pull/1389
237
+* Bug fix: Fix sleep calculation when waiting for delayed requests.
238
+  https://github.com/guzzle/guzzle/pull/1324
239
+* Feature: More flexible history containers.
240
+  https://github.com/guzzle/guzzle/pull/1373
241
+* Bug fix: defer sink stream opening in StreamHandler.
242
+  https://github.com/guzzle/guzzle/pull/1377
243
+* Bug fix: do not attempt to escape cookie values.
244
+  https://github.com/guzzle/guzzle/pull/1406
245
+* Feature: report original content encoding and length on decoded responses.
246
+  https://github.com/guzzle/guzzle/pull/1409
247
+* Bug fix: rewind seekable request bodies before dispatching to cURL.
248
+  https://github.com/guzzle/guzzle/pull/1422
249
+* Bug fix: provide an empty string to `http_build_query` for HHVM workaround.
250
+  https://github.com/guzzle/guzzle/pull/1367
251
+
252
+## 6.1.1 - 2015-11-22
253
+
254
+* Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler
255
+  https://github.com/guzzle/guzzle/commit/911bcbc8b434adce64e223a6d1d14e9a8f63e4e4
256
+* Feature: HandlerStack is now more generic.
257
+  https://github.com/guzzle/guzzle/commit/f2102941331cda544745eedd97fc8fd46e1ee33e
258
+* Bug fix: setting verify to false in the StreamHandler now disables peer
259
+  verification. https://github.com/guzzle/guzzle/issues/1256
260
+* Feature: Middleware now uses an exception factory, including more error
261
+  context. https://github.com/guzzle/guzzle/pull/1282
262
+* Feature: better support for disabled functions.
263
+  https://github.com/guzzle/guzzle/pull/1287
264
+* Bug fix: fixed regression where MockHandler was not using `sink`.
265
+  https://github.com/guzzle/guzzle/pull/1292
266
+
267
+## 6.1.0 - 2015-09-08
268
+
269
+* Feature: Added the `on_stats` request option to provide access to transfer
270
+  statistics for requests. https://github.com/guzzle/guzzle/pull/1202
271
+* Feature: Added the ability to persist session cookies in CookieJars.
272
+  https://github.com/guzzle/guzzle/pull/1195
273
+* Feature: Some compatibility updates for Google APP Engine
274
+  https://github.com/guzzle/guzzle/pull/1216
275
+* Feature: Added support for NO_PROXY to prevent the use of a proxy based on
276
+  a simple set of rules. https://github.com/guzzle/guzzle/pull/1197
277
+* Feature: Cookies can now contain square brackets.
278
+  https://github.com/guzzle/guzzle/pull/1237
279
+* Bug fix: Now correctly parsing `=` inside of quotes in Cookies.
280
+  https://github.com/guzzle/guzzle/pull/1232
281
+* Bug fix: Cusotm cURL options now correctly override curl options of the
282
+  same name. https://github.com/guzzle/guzzle/pull/1221
283
+* Bug fix: Content-Type header is now added when using an explicitly provided
284
+  multipart body. https://github.com/guzzle/guzzle/pull/1218
285
+* Bug fix: Now ignoring Set-Cookie headers that have no name.
286
+* Bug fix: Reason phrase is no longer cast to an int in some cases in the
287
+  cURL handler. https://github.com/guzzle/guzzle/pull/1187
288
+* Bug fix: Remove the Authorization header when redirecting if the Host
289
+  header changes. https://github.com/guzzle/guzzle/pull/1207
290
+* Bug fix: Cookie path matching fixes
291
+  https://github.com/guzzle/guzzle/issues/1129
292
+* Bug fix: Fixing the cURL `body_as_string` setting
293
+  https://github.com/guzzle/guzzle/pull/1201
294
+* Bug fix: quotes are no longer stripped when parsing cookies.
295
+  https://github.com/guzzle/guzzle/issues/1172
296
+* Bug fix: `form_params` and `query` now always uses the `&` separator.
297
+  https://github.com/guzzle/guzzle/pull/1163
298
+* Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set.
299
+  https://github.com/guzzle/guzzle/pull/1189
300
+
301
+## 6.0.2 - 2015-07-04
302
+
303
+* Fixed a memory leak in the curl handlers in which references to callbacks
304
+  were not being removed by `curl_reset`.
305
+* Cookies are now extracted properly before redirects.
306
+* Cookies now allow more character ranges.
307
+* Decoded Content-Encoding responses are now modified to correctly reflect
308
+  their state if the encoding was automatically removed by a handler. This
309
+  means that the `Content-Encoding` header may be removed an the
310
+  `Content-Length` modified to reflect the message size after removing the
311
+  encoding.
312
+* Added a more explicit error message when trying to use `form_params` and
313
+  `multipart` in the same request.
314
+* Several fixes for HHVM support.
315
+* Functions are now conditionally required using an additional level of
316
+  indirection to help with global Composer installations.
317
+
318
+## 6.0.1 - 2015-05-27
319
+
320
+* Fixed a bug with serializing the `query` request option where the `&`
321
+  separator was missing.
322
+* Added a better error message for when `body` is provided as an array. Please
323
+  use `form_params` or `multipart` instead.
324
+* Various doc fixes.
325
+
326
+## 6.0.0 - 2015-05-26
327
+
328
+* See the UPGRADING.md document for more information.
329
+* Added `multipart` and `form_params` request options.
330
+* Added `synchronous` request option.
331
+* Added the `on_headers` request option.
332
+* Fixed `expect` handling.
333
+* No longer adding default middlewares in the client ctor. These need to be
334
+  present on the provided handler in order to work.
335
+* Requests are no longer initiated when sending async requests with the
336
+  CurlMultiHandler. This prevents unexpected recursion from requests completing
337
+  while ticking the cURL loop.
338
+* Removed the semantics of setting `default` to `true`. This is no longer
339
+  required now that the cURL loop is not ticked for async requests.
340
+* Added request and response logging middleware.
341
+* No longer allowing self signed certificates when using the StreamHandler.
342
+* Ensuring that `sink` is valid if saving to a file.
343
+* Request exceptions now include a "handler context" which provides handler
344
+  specific contextual information.
345
+* Added `GuzzleHttp\RequestOptions` to allow request options to be applied
346
+  using constants.
347
+* `$maxHandles` has been removed from CurlMultiHandler.
348
+* `MultipartPostBody` is now part of the `guzzlehttp/psr7` package.
349
+
350
+## 5.3.0 - 2015-05-19
351
+
352
+* Mock now supports `save_to`
353
+* Marked `AbstractRequestEvent::getTransaction()` as public.
354
+* Fixed a bug in which multiple headers using different casing would overwrite
355
+  previous headers in the associative array.
356
+* Added `Utils::getDefaultHandler()`
357
+* Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated.
358
+* URL scheme is now always lowercased.
359
+
360
+## 6.0.0-beta.1
361
+
362
+* Requires PHP >= 5.5
363
+* Updated to use PSR-7
364
+  * Requires immutable messages, which basically means an event based system
365
+    owned by a request instance is no longer possible.
366
+  * Utilizing the [Guzzle PSR-7 package](https://github.com/guzzle/psr7).
367
+  * Removed the dependency on `guzzlehttp/streams`. These stream abstractions
368
+    are available in the `guzzlehttp/psr7` package under the `GuzzleHttp\Psr7`
369
+    namespace.
370
+* Added middleware and handler system
371
+  * Replaced the Guzzle event and subscriber system with a middleware system.
372
+  * No longer depends on RingPHP, but rather places the HTTP handlers directly
373
+    in Guzzle, operating on PSR-7 messages.
374
+  * Retry logic is now encapsulated in `GuzzleHttp\Middleware::retry`, which
375
+    means the `guzzlehttp/retry-subscriber` is now obsolete.
376
+  * Mocking responses is now handled using `GuzzleHttp\Handler\MockHandler`.
377
+* Asynchronous responses
378
+  * No longer supports the `future` request option to send an async request.
379
+    Instead, use one of the `*Async` methods of a client (e.g., `requestAsync`,
380
+    `getAsync`, etc.).
381
+  * Utilizing `GuzzleHttp\Promise` instead of React's promise library to avoid
382
+    recursion required by chaining and forwarding react promises. See
383
+    https://github.com/guzzle/promises
384
+  * Added `requestAsync` and `sendAsync` to send request asynchronously.
385
+  * Added magic methods for `getAsync()`, `postAsync()`, etc. to send requests
386
+    asynchronously.
387
+* Request options
388
+  * POST and form updates
389
+    * Added the `form_fields` and `form_files` request options.
390
+    * Removed the `GuzzleHttp\Post` namespace.
391
+    * The `body` request option no longer accepts an array for POST requests.
392
+  * The `exceptions` request option has been deprecated in favor of the
393
+    `http_errors` request options.
394
+  * The `save_to` request option has been deprecated in favor of `sink` request
395
+    option.
396
+* Clients no longer accept an array of URI template string and variables for
397
+  URI variables. You will need to expand URI templates before passing them
398
+  into a client constructor or request method.
399
+* Client methods `get()`, `post()`, `put()`, `patch()`, `options()`, etc. are
400
+  now magic methods that will send synchronous requests.
401
+* Replaced `Utils.php` with plain functions in `functions.php`.
402
+* Removed `GuzzleHttp\Collection`.
403
+* Removed `GuzzleHttp\BatchResults`. Batched pool results are now returned as
404
+  an array.
405
+* Removed `GuzzleHttp\Query`. Query string handling is now handled using an
406
+  associative array passed into the `query` request option. The query string
407
+  is serialized using PHP's `http_build_query`. If you need more control, you
408
+  can pass the query string in as a string.
409
+* `GuzzleHttp\QueryParser` has been replaced with the
410
+  `GuzzleHttp\Psr7\parse_query`.
411
+
412
+## 5.2.0 - 2015-01-27
413
+
414
+* Added `AppliesHeadersInterface` to make applying headers to a request based
415
+  on the body more generic and not specific to `PostBodyInterface`.
416
+* Reduced the number of stack frames needed to send requests.
417
+* Nested futures are now resolved in the client rather than the RequestFsm
418
+* Finishing state transitions is now handled in the RequestFsm rather than the
419
+  RingBridge.
420
+* Added a guard in the Pool class to not use recursion for request retries.
421
+
422
+## 5.1.0 - 2014-12-19
423
+
424
+* Pool class no longer uses recursion when a request is intercepted.
425
+* The size of a Pool can now be dynamically adjusted using a callback.
426
+  See https://github.com/guzzle/guzzle/pull/943.
427
+* Setting a request option to `null` when creating a request with a client will
428
+  ensure that the option is not set. This allows you to overwrite default
429
+  request options on a per-request basis.
430
+  See https://github.com/guzzle/guzzle/pull/937.
431
+* Added the ability to limit which protocols are allowed for redirects by
432
+  specifying a `protocols` array in the `allow_redirects` request option.
433
+* Nested futures due to retries are now resolved when waiting for synchronous
434
+  responses. See https://github.com/guzzle/guzzle/pull/947.
435
+* `"0"` is now an allowed URI path. See
436
+  https://github.com/guzzle/guzzle/pull/935.
437
+* `Query` no longer typehints on the `$query` argument in the constructor,
438
+  allowing for strings and arrays.
439
+* Exceptions thrown in the `end` event are now correctly wrapped with Guzzle
440
+  specific exceptions if necessary.
441
+
442
+## 5.0.3 - 2014-11-03
443
+
444
+This change updates query strings so that they are treated as un-encoded values
445
+by default where the value represents an un-encoded value to send over the
446
+wire. A Query object then encodes the value before sending over the wire. This
447
+means that even value query string values (e.g., ":") are url encoded. This
448
+makes the Query class match PHP's http_build_query function. However, if you
449
+want to send requests over the wire using valid query string characters that do
450
+not need to be encoded, then you can provide a string to Url::setQuery() and
451
+pass true as the second argument to specify that the query string is a raw
452
+string that should not be parsed or encoded (unless a call to getQuery() is
453
+subsequently made, forcing the query-string to be converted into a Query
454
+object).
455
+
456
+## 5.0.2 - 2014-10-30
457
+
458
+* Added a trailing `\r\n` to multipart/form-data payloads. See
459
+  https://github.com/guzzle/guzzle/pull/871
460
+* Added a `GuzzleHttp\Pool::send()` convenience method to match the docs.
461
+* Status codes are now returned as integers. See
462
+  https://github.com/guzzle/guzzle/issues/881
463
+* No longer overwriting an existing `application/x-www-form-urlencoded` header
464
+  when sending POST requests, allowing for customized headers. See
465
+  https://github.com/guzzle/guzzle/issues/877
466
+* Improved path URL serialization.
467
+
468
+  * No longer double percent-encoding characters in the path or query string if
469
+    they are already encoded.
470
+  * Now properly encoding the supplied path to a URL object, instead of only
471
+    encoding ' ' and '?'.
472
+  * Note: This has been changed in 5.0.3 to now encode query string values by
473
+    default unless the `rawString` argument is provided when setting the query
474
+    string on a URL: Now allowing many more characters to be present in the
475
+    query string without being percent encoded. See https://tools.ietf.org/html/rfc3986#appendix-A
476
+
477
+## 5.0.1 - 2014-10-16
478
+
479
+Bugfix release.
480
+
481
+* Fixed an issue where connection errors still returned response object in
482
+  error and end events event though the response is unusable. This has been
483
+  corrected so that a response is not returned in the `getResponse` method of
484
+  these events if the response did not complete. https://github.com/guzzle/guzzle/issues/867
485
+* Fixed an issue where transfer statistics were not being populated in the
486
+  RingBridge. https://github.com/guzzle/guzzle/issues/866
487
+
488
+## 5.0.0 - 2014-10-12
489
+
490
+Adding support for non-blocking responses and some minor API cleanup.
491
+
492
+### New Features
493
+
494
+* Added support for non-blocking responses based on `guzzlehttp/guzzle-ring`.
495
+* Added a public API for creating a default HTTP adapter.
496
+* Updated the redirect plugin to be non-blocking so that redirects are sent
497
+  concurrently. Other plugins like this can now be updated to be non-blocking.
498
+* Added a "progress" event so that you can get upload and download progress
499
+  events.
500
+* Added `GuzzleHttp\Pool` which implements FutureInterface and transfers
501
+  requests concurrently using a capped pool size as efficiently as possible.
502
+* Added `hasListeners()` to EmitterInterface.
503
+* Removed `GuzzleHttp\ClientInterface::sendAll` and marked
504
+  `GuzzleHttp\Client::sendAll` as deprecated (it's still there, just not the
505
+  recommended way).
506
+
507
+### Breaking changes
508
+
509
+The breaking changes in this release are relatively minor. The biggest thing to
510
+look out for is that request and response objects no longer implement fluent
511
+interfaces.
512
+
513
+* Removed the fluent interfaces (i.e., `return $this`) from requests,
514
+  responses, `GuzzleHttp\Collection`, `GuzzleHttp\Url`,
515
+  `GuzzleHttp\Query`, `GuzzleHttp\Post\PostBody`, and
516
+  `GuzzleHttp\Cookie\SetCookie`. This blog post provides a good outline of
517
+  why I did this: https://ocramius.github.io/blog/fluent-interfaces-are-evil/.
518
+  This also makes the Guzzle message interfaces compatible with the current
519
+  PSR-7 message proposal.
520
+* Removed "functions.php", so that Guzzle is truly PSR-4 compliant. Except
521
+  for the HTTP request functions from function.php, these functions are now
522
+  implemented in `GuzzleHttp\Utils` using camelCase. `GuzzleHttp\json_decode`
523
+  moved to `GuzzleHttp\Utils::jsonDecode`. `GuzzleHttp\get_path` moved to
524
+  `GuzzleHttp\Utils::getPath`. `GuzzleHttp\set_path` moved to
525
+  `GuzzleHttp\Utils::setPath`. `GuzzleHttp\batch` should now be
526
+  `GuzzleHttp\Pool::batch`, which returns an `objectStorage`. Using functions.php
527
+  caused problems for many users: they aren't PSR-4 compliant, require an
528
+  explicit include, and needed an if-guard to ensure that the functions are not
529
+  declared multiple times.
530
+* Rewrote adapter layer.
531
+    * Removing all classes from `GuzzleHttp\Adapter`, these are now
532
+      implemented as callables that are stored in `GuzzleHttp\Ring\Client`.
533
+    * Removed the concept of "parallel adapters". Sending requests serially or
534
+      concurrently is now handled using a single adapter.
535
+    * Moved `GuzzleHttp\Adapter\Transaction` to `GuzzleHttp\Transaction`. The
536
+      Transaction object now exposes the request, response, and client as public
537
+      properties. The getters and setters have been removed.
538
+* Removed the "headers" event. This event was only useful for changing the
539
+  body a response once the headers of the response were known. You can implement
540
+  a similar behavior in a number of ways. One example might be to use a
541
+  FnStream that has access to the transaction being sent. For example, when the
542
+  first byte is written, you could check if the response headers match your
543
+  expectations, and if so, change the actual stream body that is being
544
+  written to.
545
+* Removed the `asArray` parameter from
546
+  `GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header
547
+  value as an array, then use the newly added `getHeaderAsArray()` method of
548
+  `MessageInterface`. This change makes the Guzzle interfaces compatible with
549
+  the PSR-7 interfaces.
550
+* `GuzzleHttp\Message\MessageFactory` no longer allows subclasses to add
551
+  custom request options using double-dispatch (this was an implementation
552
+  detail). Instead, you should now provide an associative array to the
553
+  constructor which is a mapping of the request option name mapping to a
554
+  function that applies the option value to a request.
555
+* Removed the concept of "throwImmediately" from exceptions and error events.
556
+  This control mechanism was used to stop a transfer of concurrent requests
557
+  from completing. This can now be handled by throwing the exception or by
558
+  cancelling a pool of requests or each outstanding future request individually.
559
+* Updated to "GuzzleHttp\Streams" 3.0.
560
+    * `GuzzleHttp\Stream\StreamInterface::getContents()` no longer accepts a
561
+      `maxLen` parameter. This update makes the Guzzle streams project
562
+      compatible with the current PSR-7 proposal.
563
+    * `GuzzleHttp\Stream\Stream::__construct`,
564
+      `GuzzleHttp\Stream\Stream::factory`, and
565
+      `GuzzleHttp\Stream\Utils::create` no longer accept a size in the second
566
+      argument. They now accept an associative array of options, including the
567
+      "size" key and "metadata" key which can be used to provide custom metadata.
568
+
569
+## 4.2.2 - 2014-09-08
570
+
571
+* Fixed a memory leak in the CurlAdapter when reusing cURL handles.
572
+* No longer using `request_fulluri` in stream adapter proxies.
573
+* Relative redirects are now based on the last response, not the first response.
574
+
575
+## 4.2.1 - 2014-08-19
576
+
577
+* Ensuring that the StreamAdapter does not always add a Content-Type header
578
+* Adding automated github releases with a phar and zip
579
+
580
+## 4.2.0 - 2014-08-17
581
+
582
+* Now merging in default options using a case-insensitive comparison.
583
+  Closes https://github.com/guzzle/guzzle/issues/767
584
+* Added the ability to automatically decode `Content-Encoding` response bodies
585
+  using the `decode_content` request option. This is set to `true` by default
586
+  to decode the response body if it comes over the wire with a
587
+  `Content-Encoding`. Set this value to `false` to disable decoding the
588
+  response content, and pass a string to provide a request `Accept-Encoding`
589
+  header and turn on automatic response decoding. This feature now allows you
590
+  to pass an `Accept-Encoding` header in the headers of a request but still
591
+  disable automatic response decoding.
592
+  Closes https://github.com/guzzle/guzzle/issues/764
593
+* Added the ability to throw an exception immediately when transferring
594
+  requests in parallel. Closes https://github.com/guzzle/guzzle/issues/760
595
+* Updating guzzlehttp/streams dependency to ~2.1
596
+* No longer utilizing the now deprecated namespaced methods from the stream
597
+  package.
598
+
599
+## 4.1.8 - 2014-08-14
600
+
601
+* Fixed an issue in the CurlFactory that caused setting the `stream=false`
602
+  request option to throw an exception.
603
+  See: https://github.com/guzzle/guzzle/issues/769
604
+* TransactionIterator now calls rewind on the inner iterator.
605
+  See: https://github.com/guzzle/guzzle/pull/765
606
+* You can now set the `Content-Type` header to `multipart/form-data`
607
+  when creating POST requests to force multipart bodies.
608
+  See https://github.com/guzzle/guzzle/issues/768
609
+
610
+## 4.1.7 - 2014-08-07
611
+
612
+* Fixed an error in the HistoryPlugin that caused the same request and response
613
+  to be logged multiple times when an HTTP protocol error occurs.
614
+* Ensuring that cURL does not add a default Content-Type when no Content-Type
615
+  has been supplied by the user. This prevents the adapter layer from modifying
616
+  the request that is sent over the wire after any listeners may have already
617
+  put the request in a desired state (e.g., signed the request).
618
+* Throwing an exception when you attempt to send requests that have the
619
+  "stream" set to true in parallel using the MultiAdapter.
620
+* Only calling curl_multi_select when there are active cURL handles. This was
621
+  previously changed and caused performance problems on some systems due to PHP
622
+  always selecting until the maximum select timeout.
623
+* Fixed a bug where multipart/form-data POST fields were not correctly
624
+  aggregated (e.g., values with "&").
625
+
626
+## 4.1.6 - 2014-08-03
627
+
628
+* Added helper methods to make it easier to represent messages as strings,
629
+  including getting the start line and getting headers as a string.
630
+
631
+## 4.1.5 - 2014-08-02
632
+
633
+* Automatically retrying cURL "Connection died, retrying a fresh connect"
634
+  errors when possible.
635
+* cURL implementation cleanup
636
+* Allowing multiple event subscriber listeners to be registered per event by
637
+  passing an array of arrays of listener configuration.
638
+
639
+## 4.1.4 - 2014-07-22
640
+
641
+* Fixed a bug that caused multi-part POST requests with more than one field to
642
+  serialize incorrectly.
643
+* Paths can now be set to "0"
644
+* `ResponseInterface::xml` now accepts a `libxml_options` option and added a
645
+  missing default argument that was required when parsing XML response bodies.
646
+* A `save_to` stream is now created lazily, which means that files are not
647
+  created on disk unless a request succeeds.
648
+
649
+## 4.1.3 - 2014-07-15
650
+
651
+* Various fixes to multipart/form-data POST uploads
652
+* Wrapping function.php in an if-statement to ensure Guzzle can be used
653
+  globally and in a Composer install
654
+* Fixed an issue with generating and merging in events to an event array
655
+* POST headers are only applied before sending a request to allow you to change
656
+  the query aggregator used before uploading
657
+* Added much more robust query string parsing
658
+* Fixed various parsing and normalization issues with URLs
659
+* Fixing an issue where multi-valued headers were not being utilized correctly
660
+  in the StreamAdapter
661
+
662
+## 4.1.2 - 2014-06-18
663
+
664
+* Added support for sending payloads with GET requests
665
+
666
+## 4.1.1 - 2014-06-08
667
+
668
+* Fixed an issue related to using custom message factory options in subclasses
669
+* Fixed an issue with nested form fields in a multi-part POST
670
+* Fixed an issue with using the `json` request option for POST requests
671
+* Added `ToArrayInterface` to `GuzzleHttp\Cookie\CookieJar`
672
+
673
+## 4.1.0 - 2014-05-27
674
+
675
+* Added a `json` request option to easily serialize JSON payloads.
676
+* Added a `GuzzleHttp\json_decode()` wrapper to safely parse JSON.
677
+* Added `setPort()` and `getPort()` to `GuzzleHttp\Message\RequestInterface`.
678
+* Added the ability to provide an emitter to a client in the client constructor.
679
+* Added the ability to persist a cookie session using $_SESSION.
680
+* Added a trait that can be used to add event listeners to an iterator.
681
+* Removed request method constants from RequestInterface.
682
+* Fixed warning when invalid request start-lines are received.
683
+* Updated MessageFactory to work with custom request option methods.
684
+* Updated cacert bundle to latest build.
685
+
686
+4.0.2 (2014-04-16)
687
+------------------
688
+
689
+* Proxy requests using the StreamAdapter now properly use request_fulluri (#632)
690
+* Added the ability to set scalars as POST fields (#628)
691
+
692
+## 4.0.1 - 2014-04-04
693
+
694
+* The HTTP status code of a response is now set as the exception code of
695
+  RequestException objects.
696
+* 303 redirects will now correctly switch from POST to GET requests.
697
+* The default parallel adapter of a client now correctly uses the MultiAdapter.
698
+* HasDataTrait now initializes the internal data array as an empty array so
699
+  that the toArray() method always returns an array.
700
+
701
+## 4.0.0 - 2014-03-29
702
+
703
+* For information on changes and upgrading, see:
704
+  https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40
705
+* Added `GuzzleHttp\batch()` as a convenience function for sending requests in
706
+  parallel without needing to write asynchronous code.
707
+* Restructured how events are added to `GuzzleHttp\ClientInterface::sendAll()`.
708
+  You can now pass a callable or an array of associative arrays where each
709
+  associative array contains the "fn", "priority", and "once" keys.
710
+
711
+## 4.0.0.rc-2 - 2014-03-25
712
+
713
+* Removed `getConfig()` and `setConfig()` from clients to avoid confusion
714
+  around whether things like base_url, message_factory, etc. should be able to
715
+  be retrieved or modified.
716
+* Added `getDefaultOption()` and `setDefaultOption()` to ClientInterface
717
+* functions.php functions were renamed using snake_case to match PHP idioms
718
+* Added support for `HTTP_PROXY`, `HTTPS_PROXY`, and
719
+  `GUZZLE_CURL_SELECT_TIMEOUT` environment variables
720
+* Added the ability to specify custom `sendAll()` event priorities
721
+* Added the ability to specify custom stream context options to the stream
722
+  adapter.
723
+* Added a functions.php function for `get_path()` and `set_path()`
724
+* CurlAdapter and MultiAdapter now use a callable to generate curl resources
725
+* MockAdapter now properly reads a body and emits a `headers` event
726
+* Updated Url class to check if a scheme and host are set before adding ":"
727
+  and "//". This allows empty Url (e.g., "") to be serialized as "".
728
+* Parsing invalid XML no longer emits warnings
729
+* Curl classes now properly throw AdapterExceptions
730
+* Various performance optimizations
731
+* Streams are created with the faster `Stream\create()` function
732
+* Marked deprecation_proxy() as internal
733
+* Test server is now a collection of static methods on a class
734
+
735
+## 4.0.0-rc.1 - 2014-03-15
736
+
737
+* See https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40
738
+
739
+## 3.8.1 - 2014-01-28
740
+
741
+* Bug: Always using GET requests when redirecting from a 303 response
742
+* Bug: CURLOPT_SSL_VERIFYHOST is now correctly set to false when setting `$certificateAuthority` to false in
743
+  `Guzzle\Http\ClientInterface::setSslVerification()`
744
+* Bug: RedirectPlugin now uses strict RFC 3986 compliance when combining a base URL with a relative URL
745
+* Bug: The body of a request can now be set to `"0"`
746
+* Sending PHP stream requests no longer forces `HTTP/1.0`
747
+* Adding more information to ExceptionCollection exceptions so that users have more context, including a stack trace of
748
+  each sub-exception
749
+* Updated the `$ref` attribute in service descriptions to merge over any existing parameters of a schema (rather than
750
+  clobbering everything).
751
+* Merging URLs will now use the query string object from the relative URL (thus allowing custom query aggregators)
752
+* Query strings are now parsed in a way that they do no convert empty keys with no value to have a dangling `=`.
753
+  For example `foo&bar=baz` is now correctly parsed and recognized as `foo&bar=baz` rather than `foo=&bar=baz`.
754
+* Now properly escaping the regular expression delimiter when matching Cookie domains.
755
+* Network access is now disabled when loading XML documents
756
+
757
+## 3.8.0 - 2013-12-05
758
+
759
+* Added the ability to define a POST name for a file
760
+* JSON response parsing now properly walks additionalProperties
761
+* cURL error code 18 is now retried automatically in the BackoffPlugin
762
+* Fixed a cURL error when URLs contain fragments
763
+* Fixed an issue in the BackoffPlugin retry event where it was trying to access all exceptions as if they were
764
+  CurlExceptions
765
+* CURLOPT_PROGRESS function fix for PHP 5.5 (69fcc1e)
766
+* Added the ability for Guzzle to work with older versions of cURL that do not support `CURLOPT_TIMEOUT_MS`
767
+* Fixed a bug that was encountered when parsing empty header parameters
768
+* UriTemplate now has a `setRegex()` method to match the docs
769
+* The `debug` request parameter now checks if it is truthy rather than if it exists
770
+* Setting the `debug` request parameter to true shows verbose cURL output instead of using the LogPlugin
771
+* Added the ability to combine URLs using strict RFC 3986 compliance
772
+* Command objects can now return the validation errors encountered by the command
773
+* Various fixes to cache revalidation (#437 and 29797e5)
774
+* Various fixes to the AsyncPlugin
775
+* Cleaned up build scripts
776
+
777
+## 3.7.4 - 2013-10-02
778
+
779
+* Bug fix: 0 is now an allowed value in a description parameter that has a default value (#430)
780
+* Bug fix: SchemaFormatter now returns an integer when formatting to a Unix timestamp
781
+  (see https://github.com/aws/aws-sdk-php/issues/147)
782
+* Bug fix: Cleaned up and fixed URL dot segment removal to properly resolve internal dots
783
+* Minimum PHP version is now properly specified as 5.3.3 (up from 5.3.2) (#420)
784
+* Updated the bundled cacert.pem (#419)
785
+* OauthPlugin now supports adding authentication to headers or query string (#425)
786
+
787
+## 3.7.3 - 2013-09-08
788
+
789
+* Added the ability to get the exception associated with a request/command when using `MultiTransferException` and
790
+  `CommandTransferException`.
791
+* Setting `additionalParameters` of a response to false is now honored when parsing responses with a service description
792
+* Schemas are only injected into response models when explicitly configured.
793
+* No longer guessing Content-Type based on the path of a request. Content-Type is now only guessed based on the path of
794
+  an EntityBody.
795
+* Bug fix: ChunkedIterator can now properly chunk a \Traversable as well as an \Iterator.
796
+* Bug fix: FilterIterator now relies on `\Iterator` instead of `\Traversable`.
797
+* Bug fix: Gracefully handling malformed responses in RequestMediator::writeResponseBody()
798
+* Bug fix: Replaced call to canCache with canCacheRequest in the CallbackCanCacheStrategy of the CachePlugin
799
+* Bug fix: Visiting XML attributes first before visiting XML children when serializing requests
800
+* Bug fix: Properly parsing headers that contain commas contained in quotes
801
+* Bug fix: mimetype guessing based on a filename is now case-insensitive
802
+
803
+## 3.7.2 - 2013-08-02
804
+
805
+* Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander
806
+  See https://github.com/guzzle/guzzle/issues/371
807
+* Bug fix: Cookie domains are now matched correctly according to RFC 6265
808
+  See https://github.com/guzzle/guzzle/issues/377
809
+* Bug fix: GET parameters are now used when calculating an OAuth signature
810
+* Bug fix: Fixed an issue with cache revalidation where the If-None-Match header was being double quoted
811
+* `Guzzle\Common\AbstractHasDispatcher::dispatch()` now returns the event that was dispatched
812
+* `Guzzle\Http\QueryString::factory()` now guesses the most appropriate query aggregator to used based on the input.
813
+  See https://github.com/guzzle/guzzle/issues/379
814
+* Added a way to add custom domain objects to service description parsing using the `operation.parse_class` event. See
815
+  https://github.com/guzzle/guzzle/pull/380
816
+* cURL multi cleanup and optimizations
817
+
818
+## 3.7.1 - 2013-07-05
819
+
820
+* Bug fix: Setting default options on a client now works
821
+* Bug fix: Setting options on HEAD requests now works. See #352
822
+* Bug fix: Moving stream factory before send event to before building the stream. See #353
823
+* Bug fix: Cookies no longer match on IP addresses per RFC 6265
824
+* Bug fix: Correctly parsing header parameters that are in `<>` and quotes
825
+* Added `cert` and `ssl_key` as request options
826
+* `Host` header can now diverge from the host part of a URL if the header is set manually
827
+* `Guzzle\Service\Command\LocationVisitor\Request\XmlVisitor` was rewritten to change from using SimpleXML to XMLWriter
828
+* OAuth parameters are only added via the plugin if they aren't already set
829
+* Exceptions are now thrown when a URL cannot be parsed
830
+* Returning `false` if `Guzzle\Http\EntityBody::getContentMd5()` fails
831
+* Not setting a `Content-MD5` on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin
832
+
833
+## 3.7.0 - 2013-06-10
834
+
835
+* See UPGRADING.md for more information on how to upgrade.
836
+* Requests now support the ability to specify an array of $options when creating a request to more easily modify a
837
+  request. You can pass a 'request.options' configuration setting to a client to apply default request options to
838
+  every request created by a client (e.g. default query string variables, headers, curl options, etc.).
839
+* Added a static facade class that allows you to use Guzzle with static methods and mount the class to `\Guzzle`.
840
+  See `Guzzle\Http\StaticClient::mount`.
841
+* Added `command.request_options` to `Guzzle\Service\Command\AbstractCommand` to pass request options to requests
842
+      created by a command (e.g. custom headers, query string variables, timeout settings, etc.).
843
+* Stream size in `Guzzle\Stream\PhpStreamRequestFactory` will now be set if Content-Length is returned in the
844
+  headers of a response
845
+* Added `Guzzle\Common\Collection::setPath($path, $value)` to set a value into an array using a nested key
846
+  (e.g. `$collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];`)
847
+* ServiceBuilders now support storing and retrieving arbitrary data
848
+* CachePlugin can now purge all resources for a given URI
849
+* CachePlugin can automatically purge matching cached items when a non-idempotent request is sent to a resource
850
+* CachePlugin now uses the Vary header to determine if a resource is a cache hit
851
+* `Guzzle\Http\Message\Response` now implements `\Serializable`
852
+* Added `Guzzle\Cache\CacheAdapterFactory::fromCache()` to more easily create cache adapters
853
+* `Guzzle\Service\ClientInterface::execute()` now accepts an array, single command, or Traversable
854
+* Fixed a bug in `Guzzle\Http\Message\Header\Link::addLink()`
855
+* Better handling of calculating the size of a stream in `Guzzle\Stream\Stream` using fstat() and caching the size
856
+* `Guzzle\Common\Exception\ExceptionCollection` now creates a more readable exception message
857
+* Fixing BC break: Added back the MonologLogAdapter implementation rather than extending from PsrLog so that older
858
+  Symfony users can still use the old version of Monolog.
859
+* Fixing BC break: Added the implementation back in for `Guzzle\Http\Message\AbstractMessage::getTokenizedHeader()`.
860
+  Now triggering an E_USER_DEPRECATED warning when used. Use `$message->getHeader()->parseParams()`.
861
+* Several performance improvements to `Guzzle\Common\Collection`
862
+* Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`:
863
+  createRequest, head, delete, put, patch, post, options, prepareRequest
864
+* Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()`
865
+* Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface`
866
+* Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to
867
+  `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a
868
+  resource, string, or EntityBody into the $options parameter to specify the download location of the response.
869
+* Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a
870
+  default `array()`
871
+* Added `Guzzle\Stream\StreamInterface::isRepeatable`
872
+* Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use
873
+  $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or
874
+  $client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`.
875
+* Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers')`.
876
+* Removed `Guzzle\Http\ClientInterface::expandTemplate()`
877
+* Removed `Guzzle\Http\ClientInterface::setRequestFactory()`
878
+* Removed `Guzzle\Http\ClientInterface::getCurlMulti()`
879
+* Removed `Guzzle\Http\Message\RequestInterface::canCache`
880
+* Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`
881
+* Removed `Guzzle\Http\Message\RequestInterface::isRedirect`
882
+* Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods.
883
+* You can now enable E_USER_DEPRECATED warnings to see if you are using a deprecated method by setting
884
+  `Guzzle\Common\Version::$emitWarnings` to true.
885
+* Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use
886
+      `$request->getResponseBody()->isRepeatable()` instead.
887
+* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
888
+  `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
889
+* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
890
+  `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
891
+* Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.
892
+* Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.
893
+* Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated
894
+* Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand.
895
+  These will work through Guzzle 4.0
896
+* Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use [request.options][params].
897
+* Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client.
898
+* Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use $client->getConfig()->getPath('request.options/headers')`.
899
+* Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`.
900
+* Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.
901
+* Marked `Guzzle\Common\Collection::inject()` as deprecated.
902
+* Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');`
903
+* CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a
904
+  CacheStorageInterface. These two objects and interface will be removed in a future version.
905
+* Always setting X-cache headers on cached responses
906
+* Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin
907
+* `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface
908
+  $request, Response $response);`
909
+* `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`
910
+* `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`
911
+* Added `CacheStorageInterface::purge($url)`
912
+* `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin
913
+  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,
914
+  CanCacheStrategyInterface $canCache = null)`
915
+* Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`
916
+
917
+## 3.6.0 - 2013-05-29
918
+
919
+* ServiceDescription now implements ToArrayInterface
920
+* Added command.hidden_params to blacklist certain headers from being treated as additionalParameters
921
+* Guzzle can now correctly parse incomplete URLs
922
+* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.
923
+* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution
924
+* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().
925
+* Specific header implementations can be created for complex headers. When a message creates a header, it uses a
926
+  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and
927
+  CacheControl header implementation.
928
+* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate
929
+* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti()
930
+* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in
931
+  Guzzle\Http\Curl\RequestMediator
932
+* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.
933
+* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface
934
+* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders()
935
+* Removed Guzzle\Parser\ParserRegister::get(). Use getParser()
936
+* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser().
937
+* All response header helper functions return a string rather than mixing Header objects and strings inconsistently
938
+* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle
939
+  directly via interfaces
940
+* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist
941
+  but are a no-op until removed.
942
+* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a
943
+  `Guzzle\Service\Command\ArrayCommandInterface`.
944
+* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response
945
+  on a request while the request is still being transferred
946
+* The ability to case-insensitively search for header values
947
+* Guzzle\Http\Message\Header::hasExactHeader
948
+* Guzzle\Http\Message\Header::raw. Use getAll()
949
+* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object
950
+  instead.
951
+* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess
952
+* Added the ability to cast Model objects to a string to view debug information.
953
+
954
+## 3.5.0 - 2013-05-13
955
+
956
+* Bug: Fixed a regression so that request responses are parsed only once per oncomplete event rather than multiple times
957
+* Bug: Better cleanup of one-time events across the board (when an event is meant to fire once, it will now remove
958
+  itself from the EventDispatcher)
959
+* Bug: `Guzzle\Log\MessageFormatter` now properly writes "total_time" and "connect_time" values
960
+* Bug: Cloning an EntityEnclosingRequest now clones the EntityBody too
961
+* Bug: Fixed an undefined index error when parsing nested JSON responses with a sentAs parameter that reference a
962
+  non-existent key
963
+* Bug: All __call() method arguments are now required (helps with mocking frameworks)
964
+* Deprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference
965
+  to help with refcount based garbage collection of resources created by sending a request
966
+* Deprecating ZF1 cache and log adapters. These will be removed in the next major version.
967
+* Deprecating `Response::getPreviousResponse()` (method signature still exists, but it's deprecated). Use the
968
+  HistoryPlugin for a history.
969
+* Added a `responseBody` alias for the `response_body` location
970
+* Refactored internals to no longer rely on Response::getRequest()
971
+* HistoryPlugin can now be cast to a string
972
+* HistoryPlugin now logs transactions rather than requests and responses to more accurately keep track of the requests
973
+  and responses that are sent over the wire
974
+* Added `getEffectiveUrl()` and `getRedirectCount()` to Response objects
975
+
976
+## 3.4.3 - 2013-04-30
977
+
978
+* Bug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response
979
+* Added a check to re-extract the temp cacert bundle from the phar before sending each request
980
+
981
+## 3.4.2 - 2013-04-29
982
+
983
+* Bug fix: Stream objects now work correctly with "a" and "a+" modes
984
+* Bug fix: Removing `Transfer-Encoding: chunked` header when a Content-Length is present
985
+* Bug fix: AsyncPlugin no longer forces HEAD requests
986
+* Bug fix: DateTime timezones are now properly handled when using the service description schema formatter
987
+* Bug fix: CachePlugin now properly handles stale-if-error directives when a request to the origin server fails
988
+* Setting a response on a request will write to the custom request body from the response body if one is specified
989
+* LogPlugin now writes to php://output when STDERR is undefined
990
+* Added the ability to set multiple POST files for the same key in a single call
991
+* application/x-www-form-urlencoded POSTs now use the utf-8 charset by default
992
+* Added the ability to queue CurlExceptions to the MockPlugin
993
+* Cleaned up how manual responses are queued on requests (removed "queued_response" and now using request.before_send)
994
+* Configuration loading now allows remote files
995
+
996
+## 3.4.1 - 2013-04-16
997
+
998
+* Large refactoring to how CurlMulti handles work. There is now a proxy that sits in front of a pool of CurlMulti
999
+  handles. This greatly simplifies the implementation, fixes a couple bugs, and provides a small performance boost.
1000
+* Exceptions are now properly grouped when sending requests in parallel
1001
+* Redirects are now properly aggregated when a multi transaction fails
1002
+* Redirects now set the response on the original object even in the event of a failure
1003
+* Bug fix: Model names are now properly set even when using $refs
1004
+* Added support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax
1005
+* Added support for oauth_callback in OAuth signatures
1006
+* Added support for oauth_verifier in OAuth signatures
1007
+* Added support to attempt to retrieve a command first literally, then ucfirst, the with inflection
1008
+
1009
+## 3.4.0 - 2013-04-11
1010
+
1011
+* Bug fix: URLs are now resolved correctly based on https://tools.ietf.org/html/rfc3986#section-5.2. #289
1012
+* Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289
1013
+* Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263
1014
+* Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264.
1015
+* Bug fix: Added `number` type to service descriptions.
1016
+* Bug fix: empty parameters are removed from an OAuth signature
1017
+* Bug fix: Revalidating a cache entry prefers the Last-Modified over the Date header
1018
+* Bug fix: Fixed "array to string" error when validating a union of types in a service description
1019
+* Bug fix: Removed code that attempted to determine the size of a stream when data is written to the stream
1020
+* Bug fix: Not including an `oauth_token` if the value is null in the OauthPlugin.
1021
+* Bug fix: Now correctly aggregating successful requests and failed requests in CurlMulti when a redirect occurs.
1022
+* The new default CURLOPT_TIMEOUT setting has been increased to 150 seconds so that Guzzle works on poor connections.
1023
+* Added a feature to EntityEnclosingRequest::setBody() that will automatically set the Content-Type of the request if
1024
+  the Content-Type can be determined based on the entity body or the path of the request.
1025
+* Added the ability to overwrite configuration settings in a client when grabbing a throwaway client from a builder.
1026
+* Added support for a PSR-3 LogAdapter.
1027
+* Added a `command.after_prepare` event
1028
+* Added `oauth_callback` parameter to the OauthPlugin
1029
+* Added the ability to create a custom stream class when using a stream factory
1030
+* Added a CachingEntityBody decorator
1031
+* Added support for `additionalParameters` in service descriptions to define how custom parameters are serialized.
1032
+* The bundled SSL certificate is now provided in the phar file and extracted when running Guzzle from a phar.
1033
+* You can now send any EntityEnclosingRequest with POST fields or POST files and cURL will handle creating bodies
1034
+* POST requests using a custom entity body are now treated exactly like PUT requests but with a custom cURL method. This
1035
+  means that the redirect behavior of POST requests with custom bodies will not be the same as POST requests that use
1036
+  POST fields or files (the latter is only used when emulating a form POST in the browser).
1037
+* Lots of cleanup to CurlHandle::factory and RequestFactory::createRequest
1038
+
1039
+## 3.3.1 - 2013-03-10
1040
+
1041
+* Added the ability to create PHP streaming responses from HTTP requests
1042
+* Bug fix: Running any filters when parsing response headers with service descriptions
1043
+* Bug fix: OauthPlugin fixes to allow for multi-dimensional array signing, and sorting parameters before signing
1044
+* Bug fix: Removed the adding of default empty arrays and false Booleans to responses in order to be consistent across
1045
+  response location visitors.
1046
+* Bug fix: Removed the possibility of creating configuration files with circular dependencies
1047
+* RequestFactory::create() now uses the key of a POST file when setting the POST file name
1048
+* Added xmlAllowEmpty to serialize an XML body even if no XML specific parameters are set
1049
+
1050
+## 3.3.0 - 2013-03-03
1051
+
1052
+* A large number of performance optimizations have been made
1053
+* Bug fix: Added 'wb' as a valid write mode for streams
1054
+* Bug fix: `Guzzle\Http\Message\Response::json()` now allows scalar values to be returned
1055
+* Bug fix: Fixed bug in `Guzzle\Http\Message\Response` where wrapping quotes were stripped from `getEtag()`
1056
+* BC: Removed `Guzzle\Http\Utils` class
1057
+* BC: Setting a service description on a client will no longer modify the client's command factories.
1058
+* BC: Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using
1059
+  the 'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'
1060
+* BC: `Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getSteamType()` are no longer converted to
1061
+  lowercase
1062
+* Operation parameter objects are now lazy loaded internally
1063
+* Added ErrorResponsePlugin that can throw errors for responses defined in service description operations' errorResponses
1064
+* Added support for instantiating responseType=class responseClass classes. Classes must implement
1065
+  `Guzzle\Service\Command\ResponseClassInterface`
1066
+* Added support for additionalProperties for top-level parameters in responseType=model responseClasses. These
1067
+  additional properties also support locations and can be used to parse JSON responses where the outermost part of the
1068
+  JSON is an array
1069
+* Added support for nested renaming of JSON models (rename sentAs to name)
1070
+* CachePlugin
1071
+    * Added support for stale-if-error so that the CachePlugin can now serve stale content from the cache on error
1072
+    * Debug headers can now added to cached response in the CachePlugin
1073
+
1074
+## 3.2.0 - 2013-02-14
1075
+
1076
+* CurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients.
1077
+* URLs with no path no longer contain a "/" by default
1078
+* Guzzle\Http\QueryString does no longer manages the leading "?". This is now handled in Guzzle\Http\Url.
1079
+* BadResponseException no longer includes the full request and response message
1080
+* Adding setData() to Guzzle\Service\Description\ServiceDescriptionInterface
1081
+* Adding getResponseBody() to Guzzle\Http\Message\RequestInterface
1082
+* Various updates to classes to use ServiceDescriptionInterface type hints rather than ServiceDescription
1083
+* Header values can now be normalized into distinct values when multiple headers are combined with a comma separated list
1084
+* xmlEncoding can now be customized for the XML declaration of a XML service description operation
1085
+* Guzzle\Http\QueryString now uses Guzzle\Http\QueryAggregator\QueryAggregatorInterface objects to add custom value
1086
+  aggregation and no longer uses callbacks
1087
+* The URL encoding implementation of Guzzle\Http\QueryString can now be customized
1088
+* Bug fix: Filters were not always invoked for array service description parameters
1089
+* Bug fix: Redirects now use a target response body rather than a temporary response body
1090
+* Bug fix: The default exponential backoff BackoffPlugin was not giving when the request threshold was exceeded
1091
+* Bug fix: Guzzle now takes the first found value when grabbing Cache-Control directives
1092
+
1093
+## 3.1.2 - 2013-01-27
1094
+
1095
+* Refactored how operation responses are parsed. Visitors now include a before() method responsible for parsing the
1096
+  response body. For example, the XmlVisitor now parses the XML response into an array in the before() method.
1097
+* Fixed an issue where cURL would not automatically decompress responses when the Accept-Encoding header was sent
1098
+* CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444)
1099
+* Fixed a bug where redirect responses were not chained correctly using getPreviousResponse()
1100
+* Setting default headers on a client after setting the user-agent will not erase the user-agent setting
1101
+
1102
+## 3.1.1 - 2013-01-20
1103
+
1104
+* Adding wildcard support to Guzzle\Common\Collection::getPath()
1105
+* Adding alias support to ServiceBuilder configs
1106
+* Adding Guzzle\Service\Resource\CompositeResourceIteratorFactory and cleaning up factory interface
1107
+
1108
+## 3.1.0 - 2013-01-12
1109
+
1110
+* BC: CurlException now extends from RequestException rather than BadResponseException
1111
+* BC: Renamed Guzzle\Plugin\Cache\CanCacheStrategyInterface::canCache() to canCacheRequest() and added CanCacheResponse()
1112
+* Added getData to ServiceDescriptionInterface
1113
+* Added context array to RequestInterface::setState()
1114
+* Bug: Removing hard dependency on the BackoffPlugin from Guzzle\Http
1115
+* Bug: Adding required content-type when JSON request visitor adds JSON to a command
1116
+* Bug: Fixing the serialization of a service description with custom data
1117
+* Made it easier to deal with exceptions thrown when transferring commands or requests in parallel by providing
1118
+  an array of successful and failed responses
1119
+* Moved getPath from Guzzle\Service\Resource\Model to Guzzle\Common\Collection
1120
+* Added Guzzle\Http\IoEmittingEntityBody
1121
+* Moved command filtration from validators to location visitors
1122
+* Added `extends` attributes to service description parameters
1123
+* Added getModels to ServiceDescriptionInterface
1124
+
1125
+## 3.0.7 - 2012-12-19
1126
+
1127
+* Fixing phar detection when forcing a cacert to system if null or true
1128
+* Allowing filename to be passed to `Guzzle\Http\Message\Request::setResponseBody()`
1129
+* Cleaning up `Guzzle\Common\Collection::inject` method
1130
+* Adding a response_body location to service descriptions
1131
+
1132
+## 3.0.6 - 2012-12-09
1133
+
1134
+* CurlMulti performance improvements
1135
+* Adding setErrorResponses() to Operation
1136
+* composer.json tweaks
1137
+
1138
+## 3.0.5 - 2012-11-18
1139
+
1140
+* Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin
1141
+* Bug: Response body can now be a string containing "0"
1142
+* Bug: Using Guzzle inside of a phar uses system by default but now allows for a custom cacert
1143
+* Bug: QueryString::fromString now properly parses query string parameters that contain equal signs
1144
+* Added support for XML attributes in service description responses
1145
+* DefaultRequestSerializer now supports array URI parameter values for URI template expansion
1146
+* Added better mimetype guessing to requests and post files
1147
+
1148
+## 3.0.4 - 2012-11-11
1149
+
1150
+* Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value
1151
+* Bug: Cookies can now be added that have a name, domain, or value set to "0"
1152
+* Bug: Using the system cacert bundle when using the Phar
1153
+* Added json and xml methods to Response to make it easier to parse JSON and XML response data into data structures
1154
+* Enhanced cookie jar de-duplication
1155
+* Added the ability to enable strict cookie jars that throw exceptions when invalid cookies are added
1156
+* Added setStream to StreamInterface to actually make it possible to implement custom rewind behavior for entity bodies
1157
+* Added the ability to create any sort of hash for a stream rather than just an MD5 hash
1158
+
1159
+## 3.0.3 - 2012-11-04
1160
+
1161
+* Implementing redirects in PHP rather than cURL
1162
+* Added PECL URI template extension and using as default parser if available
1163
+* Bug: Fixed Content-Length parsing of Response factory
1164
+* Adding rewind() method to entity bodies and streams. Allows for custom rewinding of non-repeatable streams.
1165
+* Adding ToArrayInterface throughout library
1166
+* Fixing OauthPlugin to create unique nonce values per request
1167
+
1168
+## 3.0.2 - 2012-10-25
1169
+
1170
+* Magic methods are enabled by default on clients
1171
+* Magic methods return the result of a command
1172
+* Service clients no longer require a base_url option in the factory
1173
+* Bug: Fixed an issue with URI templates where null template variables were being expanded
1174
+
1175
+## 3.0.1 - 2012-10-22
1176
+
1177
+* Models can now be used like regular collection objects by calling filter, map, etc.
1178
+* Models no longer require a Parameter structure or initial data in the constructor
1179
+* Added a custom AppendIterator to get around a PHP bug with the `\AppendIterator`
1180
+
1181
+## 3.0.0 - 2012-10-15
1182
+
1183
+* Rewrote service description format to be based on Swagger
1184
+    * Now based on JSON schema
1185
+    * Added nested input structures and nested response models
1186
+    * Support for JSON and XML input and output models
1187
+    * Renamed `commands` to `operations`
1188
+    * Removed dot class notation
1189
+    * Removed custom types
1190
+* Broke the project into smaller top-level namespaces to be more component friendly
1191
+* Removed support for XML configs and descriptions. Use arrays or JSON files.
1192
+* Removed the Validation component and Inspector
1193
+* Moved all cookie code to Guzzle\Plugin\Cookie
1194
+* Magic methods on a Guzzle\Service\Client now return the command un-executed.
1195
+* Calling getResult() or getResponse() on a command will lazily execute the command if needed.
1196
+* Now shipping with cURL's CA certs and using it by default
1197
+* Added previousResponse() method to response objects
1198
+* No longer sending Accept and Accept-Encoding headers on every request
1199
+* Only sending an Expect header by default when a payload is greater than 1MB
1200
+* Added/moved client options:
1201
+    * curl.blacklist to curl.option.blacklist
1202
+    * Added ssl.certificate_authority
1203
+* Added a Guzzle\Iterator component
1204
+* Moved plugins from Guzzle\Http\Plugin to Guzzle\Plugin
1205
+* Added a more robust backoff retry strategy (replaced the ExponentialBackoffPlugin)
1206
+* Added a more robust caching plugin
1207
+* Added setBody to response objects
1208
+* Updating LogPlugin to use a more flexible MessageFormatter
1209
+* Added a completely revamped build process
1210
+* Cleaning up Collection class and removing default values from the get method
1211
+* Fixed ZF2 cache adapters
1212
+
1213
+## 2.8.8 - 2012-10-15
1214
+
1215
+* Bug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did
1216
+
1217
+## 2.8.7 - 2012-09-30
1218
+
1219
+* Bug: Fixed config file aliases for JSON includes
1220
+* Bug: Fixed cookie bug on a request object by using CookieParser to parse cookies on requests
1221
+* Bug: Removing the path to a file when sending a Content-Disposition header on a POST upload
1222
+* Bug: Hardening request and response parsing to account for missing parts
1223
+* Bug: Fixed PEAR packaging
1224
+* Bug: Fixed Request::getInfo
1225
+* Bug: Fixed cases where CURLM_CALL_MULTI_PERFORM return codes were causing curl transactions to fail
1226
+* Adding the ability for the namespace Iterator factory to look in multiple directories
1227
+* Added more getters/setters/removers from service descriptions
1228
+* Added the ability to remove POST fields from OAuth signatures
1229
+* OAuth plugin now supports 2-legged OAuth
1230
+
1231
+## 2.8.6 - 2012-09-05
1232
+
1233
+* Added the ability to modify and build service descriptions
1234
+* Added the use of visitors to apply parameters to locations in service descriptions using the dynamic command
1235
+* Added a `json` parameter location
1236
+* Now allowing dot notation for classes in the CacheAdapterFactory
1237
+* Using the union of two arrays rather than an array_merge when extending service builder services and service params
1238
+* Ensuring that a service is a string before doing strpos() checks on it when substituting services for references
1239
+  in service builder config files.
1240
+* Services defined in two different config files that include one another will by default replace the previously
1241
+  defined service, but you can now create services that extend themselves and merge their settings over the previous
1242
+* The JsonLoader now supports aliasing filenames with different filenames. This allows you to alias something like
1243
+  '_default' with a default JSON configuration file.
1244
+
1245
+## 2.8.5 - 2012-08-29
1246
+
1247
+* Bug: Suppressed empty arrays from URI templates
1248
+* Bug: Added the missing $options argument from ServiceDescription::factory to enable caching
1249
+* Added support for HTTP responses that do not contain a reason phrase in the start-line
1250
+* AbstractCommand commands are now invokable
1251
+* Added a way to get the data used when signing an Oauth request before a request is sent
1252
+
1253
+## 2.8.4 - 2012-08-15
1254
+
1255
+* Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin
1256
+* Added the ability to transfer entity bodies as a string rather than streamed. This gets around curl error 65. Set `body_as_string` in a request's curl options to enable.
1257
+* Added a StreamInterface, EntityBodyInterface, and added ftell() to Guzzle\Common\Stream
1258
+* Added an AbstractEntityBodyDecorator and a ReadLimitEntityBody decorator to transfer only a subset of a decorated stream
1259
+* Stream and EntityBody objects will now return the file position to the previous position after a read required operation (e.g. getContentMd5())
1260
+* Added additional response status codes
1261
+* Removed SSL information from the default User-Agent header
1262
+* DELETE requests can now send an entity body
1263
+* Added an EventDispatcher to the ExponentialBackoffPlugin and added an ExponentialBackoffLogger to log backoff retries
1264
+* Added the ability of the MockPlugin to consume mocked request bodies
1265
+* LogPlugin now exposes request and response objects in the extras array
1266
+
1267
+## 2.8.3 - 2012-07-30
1268
+
1269
+* Bug: Fixed a case where empty POST requests were sent as GET requests
1270
+* Bug: Fixed a bug in ExponentialBackoffPlugin that caused fatal errors when retrying an EntityEnclosingRequest that does not have a body
1271
+* Bug: Setting the response body of a request to null after completing a request, not when setting the state of a request to new
1272
+* Added multiple inheritance to service description commands
1273
+* Added an ApiCommandInterface and added `getParamNames()` and `hasParam()`
1274
+* Removed the default 2mb size cutoff from the Md5ValidatorPlugin so that it now defaults to validating everything
1275
+* Changed CurlMulti::perform to pass a smaller timeout to CurlMulti::executeHandles
1276
+
1277
+## 2.8.2 - 2012-07-24
1278
+
1279
+* Bug: Query string values set to 0 are no longer dropped from the query string
1280
+* Bug: A Collection object is no longer created each time a call is made to `Guzzle\Service\Command\AbstractCommand::getRequestHeaders()`
1281
+* Bug: `+` is now treated as an encoded space when parsing query strings
1282
+* QueryString and Collection performance improvements
1283
+* Allowing dot notation for class paths in filters attribute of a service descriptions
1284
+
1285
+## 2.8.1 - 2012-07-16
1286
+
1287
+* Loosening Event Dispatcher dependency
1288
+* POST redirects can now be customized using CURLOPT_POSTREDIR
1289
+
1290
+## 2.8.0 - 2012-07-15
1291
+
1292
+* BC: Guzzle\Http\Query
1293
+    * Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl)
1294
+    * Changed isEncodingValues() and isEncodingFields() to isUrlEncoding()
1295
+    * Changed setEncodeValues(bool) and setEncodeFields(bool) to useUrlEncoding(bool)
1296
+    * Changed the aggregation functions of QueryString to be static methods
1297
+    * Can now use fromString() with querystrings that have a leading ?
1298
+* cURL configuration values can be specified in service descriptions using `curl.` prefixed parameters
1299
+* Content-Length is set to 0 before emitting the request.before_send event when sending an empty request body
1300
+* Cookies are no longer URL decoded by default
1301
+* Bug: URI template variables set to null are no longer expanded
1302
+
1303
+## 2.7.2 - 2012-07-02
1304
+
1305
+* BC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\Http\Parser to Guzzle\Parser.
1306
+* BC: Removing Guzzle\Common\Batch\Batch::count() and replacing it with isEmpty()
1307
+* CachePlugin now allows for a custom request parameter function to check if a request can be cached
1308
+* Bug fix: CachePlugin now only caches GET and HEAD requests by default
1309
+* Bug fix: Using header glue when transferring headers over the wire
1310
+* Allowing deeply nested arrays for composite variables in URI templates
1311
+* Batch divisors can now return iterators or arrays
1312
+
1313
+## 2.7.1 - 2012-06-26
1314
+
1315
+* Minor patch to update version number in UA string
1316
+* Updating build process
1317
+
1318
+## 2.7.0 - 2012-06-25
1319
+
1320
+* BC: Inflection classes moved to Guzzle\Inflection. No longer static methods. Can now inject custom inflectors into classes.
1321
+* BC: Removed magic setX methods from commands
1322
+* BC: Magic methods mapped to service description commands are now inflected in the command factory rather than the client __call() method
1323
+* Verbose cURL options are no longer enabled by default. Set curl.debug to true on a client to enable.
1324
+* Bug: Now allowing colons in a response start-line (e.g. HTTP/1.1 503 Service Unavailable: Back-end server is at capacity)
1325
+* Guzzle\Service\Resource\ResourceIteratorApplyBatched now internally uses the Guzzle\Common\Batch namespace
1326
+* Added Guzzle\Service\Plugin namespace and a PluginCollectionPlugin
1327
+* Added the ability to set POST fields and files in a service description
1328
+* Guzzle\Http\EntityBody::factory() now accepts objects with a __toString() method
1329
+* Adding a command.before_prepare event to clients
1330
+* Added BatchClosureTransfer and BatchClosureDivisor
1331
+* BatchTransferException now includes references to the batch divisor and transfer strategies
1332
+* Fixed some tests so that they pass more reliably
1333
+* Added Guzzle\Common\Log\ArrayLogAdapter
1334
+
1335
+## 2.6.6 - 2012-06-10
1336
+
1337
+* BC: Removing Guzzle\Http\Plugin\BatchQueuePlugin
1338
+* BC: Removing Guzzle\Service\Command\CommandSet
1339
+* Adding generic batching system (replaces the batch queue plugin and command set)
1340
+* Updating ZF cache and log adapters and now using ZF's composer repository
1341
+* Bug: Setting the name of each ApiParam when creating through an ApiCommand
1342
+* Adding result_type, result_doc, deprecated, and doc_url to service descriptions
1343
+* Bug: Changed the default cookie header casing back to 'Cookie'
1344
+
1345
+## 2.6.5 - 2012-06-03
1346
+
1347
+* BC: Renaming Guzzle\Http\Message\RequestInterface::getResourceUri() to getResource()
1348
+* BC: Removing unused AUTH_BASIC and AUTH_DIGEST constants from
1349
+* BC: Guzzle\Http\Cookie is now used to manage Set-Cookie data, not Cookie data
1350
+* BC: Renaming methods in the CookieJarInterface
1351
+* Moving almost all cookie logic out of the CookiePlugin and into the Cookie or CookieJar implementations
1352
+* Making the default glue for HTTP headers ';' instead of ','
1353
+* Adding a removeValue to Guzzle\Http\Message\Header
1354
+* Adding getCookies() to request interface.
1355
+* Making it easier to add event subscribers to HasDispatcherInterface classes. Can now directly call addSubscriber()
1356
+
1357
+## 2.6.4 - 2012-05-30
1358
+
1359
+* BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class.
1360
+* BC: Moving ApiCommand specific functionality from the Inspector and on to the ApiCommand
1361
+* Bug: Fixing magic method command calls on clients
1362
+* Bug: Email constraint only validates strings
1363
+* Bug: Aggregate POST fields when POST files are present in curl handle
1364
+* Bug: Fixing default User-Agent header
1365
+* Bug: Only appending or prepending parameters in commands if they are specified
1366
+* Bug: Not requiring response reason phrases or status codes to match a predefined list of codes
1367
+* Allowing the use of dot notation for class namespaces when using instance_of constraint
1368
+* Added any_match validation constraint
1369
+* Added an AsyncPlugin
1370
+* Passing request object to the calculateWait method of the ExponentialBackoffPlugin
1371
+* Allowing the result of a command object to be changed
1372
+* Parsing location and type sub values when instantiating a service description rather than over and over at runtime
1373
+
1374
+## 2.6.3 - 2012-05-23
1375
+
1376
+* [BC] Guzzle\Common\FromConfigInterface no longer requires any config options.
1377
+* [BC] Refactoring how POST files are stored on an EntityEnclosingRequest. They are now separate from POST fields.
1378
+* You can now use an array of data when creating PUT request bodies in the request factory.
1379
+* Removing the requirement that HTTPS requests needed a Cache-Control: public directive to be cacheable.
1380
+* [Http] Adding support for Content-Type in multipart POST uploads per upload
1381
+* [Http] Added support for uploading multiple files using the same name (foo[0], foo[1])
1382
+* Adding more POST data operations for easier manipulation of POST data.
1383
+* You can now set empty POST fields.
1384
+* The body of a request is only shown on EntityEnclosingRequest objects that do not use POST files.
1385
+* Split the Guzzle\Service\Inspector::validateConfig method into two methods. One to initialize when a command is created, and one to validate.
1386
+* CS updates
1387
+
1388
+## 2.6.2 - 2012-05-19
1389
+
1390
+* [Http] Better handling of nested scope requests in CurlMulti.  Requests are now always prepares in the send() method rather than the addRequest() method.
1391
+
1392
+## 2.6.1 - 2012-05-19
1393
+
1394
+* [BC] Removing 'path' support in service descriptions.  Use 'uri'.
1395
+* [BC] Guzzle\Service\Inspector::parseDocBlock is now protected. Adding getApiParamsForClass() with cache.
1396
+* [BC] Removing Guzzle\Common\NullObject.  Use https://github.com/mtdowling/NullObject if you need it.
1397
+* [BC] Removing Guzzle\Common\XmlElement.
1398
+* All commands, both dynamic and concrete, have ApiCommand objects.
1399
+* Adding a fix for CurlMulti so that if all of the connections encounter some sort of curl error, then the loop exits.
1400
+* Adding checks to EntityEnclosingRequest so that empty POST files and fields are ignored.
1401
+* Making the method signature of Guzzle\Service\Builder\ServiceBuilder::factory more flexible.
1402
+
1403
+## 2.6.0 - 2012-05-15
1404
+
1405
+* [BC] Moving Guzzle\Service\Builder to Guzzle\Service\Builder\ServiceBuilder
1406
+* [BC] Executing a Command returns the result of the command rather than the command
1407
+* [BC] Moving all HTTP parsing logic to Guzzle\Http\Parsers. Allows for faster C implementations if needed.
1408
+* [BC] Changing the Guzzle\Http\Message\Response::setProtocol() method to accept a protocol and version in separate args.
1409
+* [BC] Moving ResourceIterator* to Guzzle\Service\Resource
1410
+* [BC] Completely refactored ResourceIterators to iterate over a cloned command object
1411
+* [BC] Moved Guzzle\Http\UriTemplate to Guzzle\Http\Parser\UriTemplate\UriTemplate
1412
+* [BC] Guzzle\Guzzle is now deprecated
1413
+* Moving Guzzle\Common\Guzzle::inject to Guzzle\Common\Collection::inject
1414
+* Adding Guzzle\Version class to give version information about Guzzle
1415
+* Adding Guzzle\Http\Utils class to provide getDefaultUserAgent() and getHttpDate()
1416
+* Adding Guzzle\Curl\CurlVersion to manage caching curl_version() data
1417
+* ServiceDescription and ServiceBuilder are now cacheable using similar configs
1418
+* Changing the format of XML and JSON service builder configs.  Backwards compatible.
1419
+* Cleaned up Cookie parsing
1420
+* Trimming the default Guzzle User-Agent header
1421
+* Adding a setOnComplete() method to Commands that is called when a command completes
1422
+* Keeping track of requests that were mocked in the MockPlugin
1423
+* Fixed a caching bug in the CacheAdapterFactory
1424
+* Inspector objects can be injected into a Command object
1425
+* Refactoring a lot of code and tests to be case insensitive when dealing with headers
1426
+* Adding Guzzle\Http\Message\HeaderComparison for easy comparison of HTTP headers using a DSL
1427
+* Adding the ability to set global option overrides to service builder configs
1428
+* Adding the ability to include other service builder config files from within XML and JSON files
1429
+* Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method.
1430
+
1431
+## 2.5.0 - 2012-05-08
1432
+
1433
+* Major performance improvements
1434
+* [BC] Simplifying Guzzle\Common\Collection.  Please check to see if you are using features that are now deprecated.
1435
+* [BC] Using a custom validation system that allows a flyweight implementation for much faster validation. No longer using Symfony2 Validation component.
1436
+* [BC] No longer supporting "{{ }}" for injecting into command or UriTemplates.  Use "{}"
1437
+* Added the ability to passed parameters to all requests created by a client
1438
+* Added callback functionality to the ExponentialBackoffPlugin
1439
+* Using microtime in ExponentialBackoffPlugin to allow more granular backoff strategies.
1440
+* Rewinding request stream bodies when retrying requests
1441
+* Exception is thrown when JSON response body cannot be decoded
1442
+* Added configurable magic method calls to clients and commands.  This is off by default.
1443
+* Fixed a defect that added a hash to every parsed URL part
1444
+* Fixed duplicate none generation for OauthPlugin.
1445
+* Emitting an event each time a client is generated by a ServiceBuilder
1446
+* Using an ApiParams object instead of a Collection for parameters of an ApiCommand
1447
+* cache.* request parameters should be renamed to params.cache.*
1448
+* Added the ability to set arbitrary curl options on requests (disable_wire, progress, etc.). See CurlHandle.
1449
+* Added the ability to disable type validation of service descriptions
1450
+* ServiceDescriptions and ServiceBuilders are now Serializable