src
7 months ago
CHANGELOG.md
7 months ago
LICENSE
2 years ago
README.md
7 months ago
UPGRADING.md
7 months ago
composer.json
7 months ago
package-lock.json
7 months ago
CHANGELOG.md
1684 lines
| 1 | # Change Log |
| 2 | |
| 3 | Please refer to [](UPGRADING.mdUPGRADING](UPGRADING.md](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 [](https://github.com/guzzle/guzzle/pull/2946#2946](https://github.com/guzzle/guzzle/pull/2946](https://github.com/guzzle/guzzle/pull/2946) |
| 169 | - Allow `symfony/deprecation-contracts` version 3 [](https://github.com/guzzle/guzzle/pull/2961#2961](https://github.com/guzzle/guzzle/pull/2961](https://github.com/guzzle/guzzle/pull/2961) |
| 170 | |
| 171 | ### Fixed |
| 172 | |
| 173 | - Only close curl handle if it's done [](https://github.com/guzzle/guzzle/pull/2950#2950](https://github.com/guzzle/guzzle/pull/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 [](https://github.com/guzzle/guzzle/pull/2929#2929](https://github.com/guzzle/guzzle/pull/2929](https://github.com/guzzle/guzzle/pull/2929), [](https://github.com/guzzle/guzzle/pull/2939#2939](https://github.com/guzzle/guzzle/pull/2939](https://github.com/guzzle/guzzle/pull/2939) |
| 181 | - Support `psr/log` version 2 and 3 [](https://github.com/guzzle/guzzle/pull/2943#2943](https://github.com/guzzle/guzzle/pull/2943](https://github.com/guzzle/guzzle/pull/2943) |
| 182 | |
| 183 | ### Fixed |
| 184 | |
| 185 | - Make sure we always call `restore_error_handler()` [](https://github.com/guzzle/guzzle/pull/2915#2915](https://github.com/guzzle/guzzle/pull/2915](https://github.com/guzzle/guzzle/pull/2915) |
| 186 | - Fix progress parameter type compatibility between the cURL and stream handlers [](https://github.com/guzzle/guzzle/pull/2936#2936](https://github.com/guzzle/guzzle/pull/2936](https://github.com/guzzle/guzzle/pull/2936) |
| 187 | - Throw `InvalidArgumentException` when an incorrect `headers` array is provided [](https://github.com/guzzle/guzzle/pull/2916#2916](https://github.com/guzzle/guzzle/pull/2916](https://github.com/guzzle/guzzle/pull/2916), [](https://github.com/guzzle/guzzle/pull/2942#2942](https://github.com/guzzle/guzzle/pull/2942](https://github.com/guzzle/guzzle/pull/2942) |
| 188 | |
| 189 | ### Changed |
| 190 | |
| 191 | - Be more strict with types [](https://github.com/guzzle/guzzle/pull/2914#2914](https://github.com/guzzle/guzzle/pull/2914](https://github.com/guzzle/guzzle/pull/2914), [](https://github.com/guzzle/guzzle/pull/2917#2917](https://github.com/guzzle/guzzle/pull/2917](https://github.com/guzzle/guzzle/pull/2917), [](https://github.com/guzzle/guzzle/pull/2919#2919](https://github.com/guzzle/guzzle/pull/2919](https://github.com/guzzle/guzzle/pull/2919), [](https://github.com/guzzle/guzzle/pull/2945#2945](https://github.com/guzzle/guzzle/pull/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 [](https://github.com/guzzle/guzzle/pull/2413#2413](https://github.com/guzzle/guzzle/pull/2413](https://github.com/guzzle/guzzle/pull/2413) |
| 199 | - Support the cURL (http://) scheme for StreamHandler proxies [](https://github.com/guzzle/guzzle/pull/2850#2850](https://github.com/guzzle/guzzle/pull/2850](https://github.com/guzzle/guzzle/pull/2850) |
| 200 | - Support for `guzzlehttp/psr7:^2.0` [](https://github.com/guzzle/guzzle/pull/2878#2878](https://github.com/guzzle/guzzle/pull/2878](https://github.com/guzzle/guzzle/pull/2878) |
| 201 | |
| 202 | ### Fixed |
| 203 | |
| 204 | - Handle exceptions on invalid header consistently between PHP versions and handlers [](https://github.com/guzzle/guzzle/pull/2872#2872](https://github.com/guzzle/guzzle/pull/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 [](https://github.com/guzzle/guzzle/pull/2712#2712](https://github.com/guzzle/guzzle/pull/2712](https://github.com/guzzle/guzzle/pull/2712), [](https://github.com/guzzle/guzzle/pull/2715#2715](https://github.com/guzzle/guzzle/pull/2715](https://github.com/guzzle/guzzle/pull/2715), [](https://github.com/guzzle/guzzle/pull/2789#2789](https://github.com/guzzle/guzzle/pull/2789](https://github.com/guzzle/guzzle/pull/2789) |
| 212 | - Support passing a body summarizer to the http errors middleware [](https://github.com/guzzle/guzzle/pull/2795#2795](https://github.com/guzzle/guzzle/pull/2795](https://github.com/guzzle/guzzle/pull/2795) |
| 213 | |
| 214 | ### Fixed |
| 215 | |
| 216 | - Handle exceptions during response creation [](https://github.com/guzzle/guzzle/pull/2591#2591](https://github.com/guzzle/guzzle/pull/2591](https://github.com/guzzle/guzzle/pull/2591) |
| 217 | - Fix CURLOPT_ENCODING not to be overwritten [](https://github.com/guzzle/guzzle/pull/2595#2595](https://github.com/guzzle/guzzle/pull/2595](https://github.com/guzzle/guzzle/pull/2595) |
| 218 | - Make sure the Request always has a body object [](https://github.com/guzzle/guzzle/pull/2804#2804](https://github.com/guzzle/guzzle/pull/2804](https://github.com/guzzle/guzzle/pull/2804) |
| 219 | |
| 220 | ### Changed |
| 221 | |
| 222 | - The `TooManyRedirectsException` has a response [](https://github.com/guzzle/guzzle/pull/2660#2660](https://github.com/guzzle/guzzle/pull/2660](https://github.com/guzzle/guzzle/pull/2660) |
| 223 | - Avoid "functions" from dependencies [](https://github.com/guzzle/guzzle/pull/2712#2712](https://github.com/guzzle/guzzle/pull/2712](https://github.com/guzzle/guzzle/pull/2712) |
| 224 | |
| 225 | ### Deprecated |
| 226 | |
| 227 | - Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [](https://github.com/guzzle/guzzle/pull/2786#2786](https://github.com/guzzle/guzzle/pull/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 [](https://github.com/guzzle/guzzle/pull/2699#2699](https://github.com/guzzle/guzzle/pull/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 [](https://github.com/guzzle/guzzle/pull/2629#2629](https://github.com/guzzle/guzzle/pull/2629](https://github.com/guzzle/guzzle/pull/2629) |
| 280 | * Disabled IDN support by default and require ext-intl to use it [](https://github.com/guzzle/guzzle/pull/2675#2675](https://github.com/guzzle/guzzle/pull/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. [](https://github.com/guzzle/guzzle/pull/2546#2546](https://github.com/guzzle/guzzle/pull/2546](https://github.com/guzzle/guzzle/pull/2546) |
| 288 | * `ClientInterface::MAJOR_VERSION` [](https://github.com/guzzle/guzzle/pull/2583#2583](https://github.com/guzzle/guzzle/pull/2583](https://github.com/guzzle/guzzle/pull/2583) |
| 289 | |
| 290 | ### Changed |
| 291 | |
| 292 | * Avoid the `getenv` function when unsafe [](https://github.com/guzzle/guzzle/pull/2531#2531](https://github.com/guzzle/guzzle/pull/2531](https://github.com/guzzle/guzzle/pull/2531) |
| 293 | * Added real client methods [](https://github.com/guzzle/guzzle/pull/2529#2529](https://github.com/guzzle/guzzle/pull/2529](https://github.com/guzzle/guzzle/pull/2529) |
| 294 | * Avoid functions due to global install conflicts [](https://github.com/guzzle/guzzle/pull/2546#2546](https://github.com/guzzle/guzzle/pull/2546](https://github.com/guzzle/guzzle/pull/2546) |
| 295 | * Use Symfony intl-idn polyfill [](https://github.com/guzzle/guzzle/pull/2550#2550](https://github.com/guzzle/guzzle/pull/2550](https://github.com/guzzle/guzzle/pull/2550) |
| 296 | * Adding methods for HTTP verbs like `Client::get()`, `Client::head()`, `Client::patch()` etc [](https://github.com/guzzle/guzzle/pull/2529#2529](https://github.com/guzzle/guzzle/pull/2529](https://github.com/guzzle/guzzle/pull/2529) |
| 297 | * `ConnectException` extends `TransferException` [](https://github.com/guzzle/guzzle/pull/2541#2541](https://github.com/guzzle/guzzle/pull/2541](https://github.com/guzzle/guzzle/pull/2541) |
| 298 | * Updated the default User Agent to "GuzzleHttp/7" [](https://github.com/guzzle/guzzle/pull/2654#2654](https://github.com/guzzle/guzzle/pull/2654](https://github.com/guzzle/guzzle/pull/2654) |
| 299 | |
| 300 | ### Fixed |
| 301 | |
| 302 | * Various intl icu issues [](https://github.com/guzzle/guzzle/pull/2626#2626](https://github.com/guzzle/guzzle/pull/2626](https://github.com/guzzle/guzzle/pull/2626) |
| 303 | |
| 304 | ### Removed |
| 305 | |
| 306 | * Pool option `pool_size` [](https://github.com/guzzle/guzzle/pull/2528#2528](https://github.com/guzzle/guzzle/pull/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 [](UPGRADING.mdthe upgrade document](UPGRADING.md](UPGRADING.md) that describes all BC breaking changes. |
| 313 | |
| 314 | ### Added |
| 315 | |
| 316 | * Implement PSR-18 and dropped PHP 5 support [](https://github.com/guzzle/guzzle/pull/2421#2421](https://github.com/guzzle/guzzle/pull/2421](https://github.com/guzzle/guzzle/pull/2421) [](https://github.com/guzzle/guzzle/pull/2474#2474](https://github.com/guzzle/guzzle/pull/2474](https://github.com/guzzle/guzzle/pull/2474) |
| 317 | * PHP 7 types [](https://github.com/guzzle/guzzle/pull/2442#2442](https://github.com/guzzle/guzzle/pull/2442](https://github.com/guzzle/guzzle/pull/2442) [](https://github.com/guzzle/guzzle/pull/2449#2449](https://github.com/guzzle/guzzle/pull/2449](https://github.com/guzzle/guzzle/pull/2449) [](https://github.com/guzzle/guzzle/pull/2466#2466](https://github.com/guzzle/guzzle/pull/2466](https://github.com/guzzle/guzzle/pull/2466) [](https://github.com/guzzle/guzzle/pull/2497#2497](https://github.com/guzzle/guzzle/pull/2497](https://github.com/guzzle/guzzle/pull/2497) [](https://github.com/guzzle/guzzle/pull/2499#2499](https://github.com/guzzle/guzzle/pull/2499](https://github.com/guzzle/guzzle/pull/2499) |
| 318 | * IDN support for redirects [](https://github.com/guzzle/guzzle/pull/24242424](https://github.com/guzzle/guzzle/pull/2424](https://github.com/guzzle/guzzle/pull/2424) |
| 319 | |
| 320 | ### Changed |
| 321 | |
| 322 | * Dont allow passing null as third argument to `BadResponseException::__construct()` [](https://github.com/guzzle/guzzle/pull/2427#2427](https://github.com/guzzle/guzzle/pull/2427](https://github.com/guzzle/guzzle/pull/2427) |
| 323 | * Use SAPI constant instead of method call [](https://github.com/guzzle/guzzle/pull/2450#2450](https://github.com/guzzle/guzzle/pull/2450](https://github.com/guzzle/guzzle/pull/2450) |
| 324 | * Use native function invocation [](https://github.com/guzzle/guzzle/pull/2444#2444](https://github.com/guzzle/guzzle/pull/2444](https://github.com/guzzle/guzzle/pull/2444) |
| 325 | * Better defaults for PHP installations with old ICU lib [](https://github.com/guzzle/guzzle/pull/24542454](https://github.com/guzzle/guzzle/pull/2454](https://github.com/guzzle/guzzle/pull/2454) |
| 326 | * Added visibility to all constants [](https://github.com/guzzle/guzzle/pull/2462#2462](https://github.com/guzzle/guzzle/pull/2462](https://github.com/guzzle/guzzle/pull/2462) |
| 327 | * Dont allow passing `null` as URI to `Client::request()` and `Client::requestAsync()` [](https://github.com/guzzle/guzzle/pull/2461#2461](https://github.com/guzzle/guzzle/pull/2461](https://github.com/guzzle/guzzle/pull/2461) |
| 328 | * Widen the exception argument to throwable [](https://github.com/guzzle/guzzle/pull/2495#2495](https://github.com/guzzle/guzzle/pull/2495](https://github.com/guzzle/guzzle/pull/2495) |
| 329 | |
| 330 | ### Fixed |
| 331 | |
| 332 | * Logging when Promise rejected with a string [](https://github.com/guzzle/guzzle/pull/2311#2311](https://github.com/guzzle/guzzle/pull/2311](https://github.com/guzzle/guzzle/pull/2311) |
| 333 | |
| 334 | ### Removed |
| 335 | |
| 336 | * Class `SeekException` [](https://github.com/guzzle/guzzle/pull/2162#2162](https://github.com/guzzle/guzzle/pull/2162](https://github.com/guzzle/guzzle/pull/2162) |
| 337 | * `RequestException::getResponseBodySummary()` [](https://github.com/guzzle/guzzle/pull/2425#2425](https://github.com/guzzle/guzzle/pull/2425](https://github.com/guzzle/guzzle/pull/2425) |
| 338 | * `CookieJar::getCookieValue()` [](https://github.com/guzzle/guzzle/pull/2433#2433](https://github.com/guzzle/guzzle/pull/2433](https://github.com/guzzle/guzzle/pull/2433) |
| 339 | * `uri_template()` and `UriTemplate` [](https://github.com/guzzle/guzzle/pull/2440#2440](https://github.com/guzzle/guzzle/pull/2440](https://github.com/guzzle/guzzle/pull/2440) |
| 340 | * Request options `save_to` and `exceptions` [](https://github.com/guzzle/guzzle/pull/2464#2464](https://github.com/guzzle/guzzle/pull/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 [](https://github.com/guzzle/guzzle/pull/2489#2489](https://github.com/guzzle/guzzle/pull/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 [](https://github.com/guzzle/guzzle/pull/2454#2454](https://github.com/guzzle/guzzle/pull/2454](https://github.com/guzzle/guzzle/pull/2454) |
| 351 | * IDN support for redirects [](https://github.com/guzzle/guzzle/pull/2424#2424](https://github.com/guzzle/guzzle/pull/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. [](https://github.com/guzzle/guzzle/pull/2143#2143](https://github.com/guzzle/guzzle/pull/2143](https://github.com/guzzle/guzzle/pull/2143) |
| 357 | * Improvement: Added support to pass arbitrary options to `curl_multi_init`. [](https://github.com/guzzle/guzzle/pull/2287#2287](https://github.com/guzzle/guzzle/pull/2287](https://github.com/guzzle/guzzle/pull/2287) |
| 358 | * Fix: Gracefully handle passing `null` to the `header` option. [](https://github.com/guzzle/guzzle/pull/2132#2132](https://github.com/guzzle/guzzle/pull/2132](https://github.com/guzzle/guzzle/pull/2132) |
| 359 | * Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [](https://github.com/guzzle/guzzle/pull/2132#2132](https://github.com/guzzle/guzzle/pull/2132](https://github.com/guzzle/guzzle/pull/2132) |
| 360 | * Fix: Prevent undefined offset when using array for ssl_key options. [](https://github.com/guzzle/guzzle/pull/2348#2348](https://github.com/guzzle/guzzle/pull/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 [](https://github.com/guzzle/guzzle/pull/2108#2108](https://github.com/guzzle/guzzle/pull/2108](https://github.com/guzzle/guzzle/pull/2108) |
| 373 | * Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [](https://github.com/guzzle/guzzle/pull/2081#2081](https://github.com/guzzle/guzzle/pull/2081](https://github.com/guzzle/guzzle/pull/2081) |
| 374 | * Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [](https://github.com/guzzle/guzzle/pull/2161#2161](https://github.com/guzzle/guzzle/pull/2161](https://github.com/guzzle/guzzle/pull/2161) |
| 375 | * Improvement: Added `GuzzleHttp\Exception\InvalidArgumentException` [](https://github.com/guzzle/guzzle/pull/2163#2163](https://github.com/guzzle/guzzle/pull/2163](https://github.com/guzzle/guzzle/pull/2163) |
| 376 | * Improvement: Added `GuzzleHttp\_current_time()` to use `hrtime()` if that function exists. [](https://github.com/guzzle/guzzle/pull/2242#2242](https://github.com/guzzle/guzzle/pull/2242](https://github.com/guzzle/guzzle/pull/2242) |
| 377 | * Improvement: Added curl's `appconnect_time` in `TransferStats` [](https://github.com/guzzle/guzzle/pull/2284#2284](https://github.com/guzzle/guzzle/pull/2284](https://github.com/guzzle/guzzle/pull/2284) |
| 378 | * Improvement: Make GuzzleException extend Throwable wherever it's available [](https://github.com/guzzle/guzzle/pull/2273#2273](https://github.com/guzzle/guzzle/pull/2273](https://github.com/guzzle/guzzle/pull/2273) |
| 379 | * Fix: Prevent concurrent writes to file when saving `CookieJar` [](https://github.com/guzzle/guzzle/pull/2335#2335](https://github.com/guzzle/guzzle/pull/2335](https://github.com/guzzle/guzzle/pull/2335) |
| 380 | * Improvement: Update `MockHandler` so we can test transfer time [](https://github.com/guzzle/guzzle/pull/2362#2362](https://github.com/guzzle/guzzle/pull/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 [](https://github.com/guzzle/guzzle/pull/2014#2014](https://github.com/guzzle/guzzle/pull/2014](https://github.com/guzzle/guzzle/pull/2014) |
| 396 | * Improvement: Better ConnectException detection [](https://github.com/guzzle/guzzle/pull/2012#2012](https://github.com/guzzle/guzzle/pull/2012](https://github.com/guzzle/guzzle/pull/2012) |
| 397 | * Bug fix: Malformed domain that contains a "/" [](https://github.com/guzzle/guzzle/pull/1999#1999](https://github.com/guzzle/guzzle/pull/1999](https://github.com/guzzle/guzzle/pull/1999) |
| 398 | * Bug fix: Undefined offset when a cookie has no first key-value pair [](https://github.com/guzzle/guzzle/pull/1998#1998](https://github.com/guzzle/guzzle/pull/1998](https://github.com/guzzle/guzzle/pull/1998) |
| 399 | * Improvement: Support PHPUnit 6 [](https://github.com/guzzle/guzzle/pull/1953#1953](https://github.com/guzzle/guzzle/pull/1953](https://github.com/guzzle/guzzle/pull/1953) |
| 400 | * Bug fix: Support empty headers [](https://github.com/guzzle/guzzle/pull/1915#1915](https://github.com/guzzle/guzzle/pull/1915](https://github.com/guzzle/guzzle/pull/1915) |
| 401 | * Bug fix: Ignore case during header modifications [](https://github.com/guzzle/guzzle/pull/1916#1916](https://github.com/guzzle/guzzle/pull/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) [](https://github.com/guzzle/guzzle/pull/1608#1608](https://github.com/guzzle/guzzle/pull/1608](https://github.com/guzzle/guzzle/pull/1608), [](https://github.com/guzzle/guzzle/pull/1659#1659](https://github.com/guzzle/guzzle/pull/1659](https://github.com/guzzle/guzzle/pull/1659) |
| 409 | * Improvement: Don't include summary in exception message when body is empty [](https://github.com/guzzle/guzzle/pull/1621#1621](https://github.com/guzzle/guzzle/pull/1621](https://github.com/guzzle/guzzle/pull/1621) |
| 410 | * Improvement: Handle `on_headers` option in MockHandler [](https://github.com/guzzle/guzzle/pull/1580#1580](https://github.com/guzzle/guzzle/pull/1580](https://github.com/guzzle/guzzle/pull/1580) |
| 411 | * Improvement: Added SUSE Linux CA path [](https://github.com/guzzle/guzzle/issues/1609#1609](https://github.com/guzzle/guzzle/issues/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 [](https://github.com/guzzle/guzzle/pull/1641#1641](https://github.com/guzzle/guzzle/pull/1641](https://github.com/guzzle/guzzle/pull/1641) |
| 413 | * Feature: Added `read_timeout` option [](https://github.com/guzzle/guzzle/pull/1611#1611](https://github.com/guzzle/guzzle/pull/1611](https://github.com/guzzle/guzzle/pull/1611) |
| 414 | * Bug fix: PHP 7.x fixes [](https://github.com/guzzle/guzzle/pull/1685#1685](https://github.com/guzzle/guzzle/pull/1685](https://github.com/guzzle/guzzle/pull/1685), [](https://github.com/guzzle/guzzle/pull/1686#1686](https://github.com/guzzle/guzzle/pull/1686](https://github.com/guzzle/guzzle/pull/1686), [](https://github.com/guzzle/guzzle/pull/1811#1811](https://github.com/guzzle/guzzle/pull/1811](https://github.com/guzzle/guzzle/pull/1811) |
| 415 | * Deprecation: BadResponseException instantiation without a response [](https://github.com/guzzle/guzzle/pull/1642#1642](https://github.com/guzzle/guzzle/pull/1642](https://github.com/guzzle/guzzle/pull/1642) |
| 416 | * Feature: Added NTLM auth [](https://github.com/guzzle/guzzle/pull/1569#1569](https://github.com/guzzle/guzzle/pull/1569](https://github.com/guzzle/guzzle/pull/1569) |
| 417 | * Feature: Track redirect HTTP status codes [](https://github.com/guzzle/guzzle/pull/1711#1711](https://github.com/guzzle/guzzle/pull/1711](https://github.com/guzzle/guzzle/pull/1711) |
| 418 | * Improvement: Check handler type during construction [](https://github.com/guzzle/guzzle/pull/1745#1745](https://github.com/guzzle/guzzle/pull/1745](https://github.com/guzzle/guzzle/pull/1745) |
| 419 | * Improvement: Always include the Content-Length if there's a body [](https://github.com/guzzle/guzzle/pull/1721#1721](https://github.com/guzzle/guzzle/pull/1721](https://github.com/guzzle/guzzle/pull/1721) |
| 420 | * Feature: Added convenience method to access a cookie by name [](https://github.com/guzzle/guzzle/pull/1318#1318](https://github.com/guzzle/guzzle/pull/1318](https://github.com/guzzle/guzzle/pull/1318) |
| 421 | * Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [](https://github.com/guzzle/guzzle/pull/1684#1684](https://github.com/guzzle/guzzle/pull/1684](https://github.com/guzzle/guzzle/pull/1684) |
| 422 | * Improvement: Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [](https://github.com/guzzle/guzzle/pull/1827#1827](https://github.com/guzzle/guzzle/pull/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 [](https://github.com/guzzle/psr7Guzzle PSR-7 package](https://github.com/guzzle/psr7](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 |
| 1684 |