5 + Added http\Client\Curl\User interface for userland event loops
6 + Added http\Url::IGNORE_ERRORS, http\Url::SILENT_ERRORS and http\Url::STDFLAGS
7 + Added http\Client::setDebug(callable $debug)
8 + Added http\Client\Curl\FEATURES constants and namespace
9 + Added http\Client\Curl\VERSIONS constants and namespace
10 + Added share_cookies and share_ssl (libcurl >= 7.23.0) options to http\Client::configure()
11 + http\Client uses curl_share handles to properly share cookies and SSL/TLS sessions between requests
12 + Improved configure checks for default CA bundles
13 + Improved negotiation precision
14 * Fixed regression introduced by http\Params::PARSE_RFC5987: negotiation using the params parser would receive param keys without the trailing asterisk, stripped by http\Params::PARSE_RFC5987.
15 * Fix gh-issue #50: http\Client::dequeue() within http\Client::setDebug() causes segfault (Mike, Maik Wagner)
16 * Fix gh-issue #47: http\Url: Null pointer deref in sanitize_value() (Mike, @rc0r)
17 * Fix gh-issue #45: HTTP/2 response message parsing broken with libcurl >= 7.49.1 (Mike)
18 * Fix gh-issue #43: Joining query with empty original variable in query (Mike, Sander Backus)
19 * Fix gh-issue #42: fatal error when using punycode in URLs (Mike, Sebastian Thielen)
20 * Fix gh-issue #41: Use curl_version_info_data.features when initializing options (Mike)
21 * Fix gh-issue #40: determinde the SSL backend used by curl at runtime (Mike, @rcanavan)
22 * Fix gh-issue #39: Notice: http\Client::enqueue(): Could not set option proxy_service_name (Mike, @rcanavan)
23 * Fix gh-issue #38: Persistent curl handles: error code not properly reset (Mike, @afflerbach)
24 * Fix gh-issue #36: Unexpected cookies sent if persistent_handle_id is used (Mike, @rcanavan, @afflerbach)
25 * Fix gh-issue #34: allow setting multiple headers with the same name (Mike, @rcanavan)
26 * Fix gh-issue #33: allow setting prodyhost request option to NULL (Mike, @rcanavan)
27 * Fix gh-issue #31: add/improve configure checks for default CA bundle/path (Mike, @rcanavan)
30 * Fixed PHP-5.3 compatibility
31 * Fixed recursive calls to the event loop dispatcher
34 * Fix bug #73055: crash in http\QueryString (Mike, @rc0r) (CVE-2016-7398)
35 * Fix bug #73185: Buffer overflow in HTTP parse_hostinfo() (Mike, @rc0r) (CVE-2016-7961)
36 * Fix HTTP/2 version parser for older libcurl versions (Mike)
38 ## 2.6.0RC1, 2016-10-04
40 + Added http\Client\Curl\User interface for userland event loops
41 + Added http\Url::IGNORE_ERRORS, http\Url::SILENT_ERRORS and http\Url::STDFLAGS
42 + Added http\Client::setDebug(callable $debug)
43 + Added http\Client\Curl\FEATURES constants and namespace
44 + Added http\Client\Curl\VERSIONS constants and namespace
45 + Added share_cookies and share_ssl (libcurl >= 7.23.0) options to http\Client::configure()
46 + http\Client uses curl_share handles to properly share cookies and SSL/TLS sessions between requests
47 + Improved configure checks for default CA bundles
48 + Improved negotiation precision
49 * Fixed regression introduced by http\Params::PARSE_RFC5987: negotiation using the params parser would receive param keys without the trailing asterisk, stripped by http\Params::PARSE_RFC5987.
50 * Fix gh-issue #50: http\Client::dequeue() within http\Client::setDebug() causes segfault (Mike, Maik Wagner)
51 * Fix gh-issue #47: http\Url: Null pointer deref in sanitize_value() (Mike, @rc0r)
52 * Fix gh-issue #45: HTTP/2 response message parsing broken with libcurl >= 7.49.1 (Mike)
53 * Fix gh-issue #43: Joining query with empty original variable in query (Mike, Sander Backus)
54 * Fix gh-issue #42: fatal error when using punycode in URLs (Mike, Sebastian Thielen)
55 * Fix gh-issue #41: Use curl_version_info_data.features when initializing options (Mike)
56 * Fix gh-issue #40: determinde the SSL backend used by curl at runtime (Mike, @rcanavan)
57 * Fix gh-issue #39: Notice: http\Client::enqueue(): Could not set option proxy_service_name (Mike, @rcanavan)
58 * Fix gh-issue #38: Persistent curl handles: error code not properly reset (Mike, @afflerbach)
59 * Fix gh-issue #36: Unexpected cookies sent if persistent_handle_id is used (Mike, @rcanavan, @afflerbach)
60 * Fix gh-issue #34: allow setting multiple headers with the same name (Mike, @rcanavan)
61 * Fix gh-issue #33: allow setting prodyhost request option to NULL (Mike, @rcanavan)
62 * Fix gh-issue #31: add/improve configure checks for default CA bundle/path (Mike, @rcanavan)
65 * Fixed PHP-5.3 compatibility
66 * Fixed recursive calls to the event loop dispatcher
69 * Fix bug #73055: crash in http\QueryString (Mike, @rc0r) (CVE-2016-7398)
70 * Fix bug #73185: Buffer overflow in HTTP parse_hostinfo() (Mike, @rc0r) (CVE-2016-7961)
71 * Fix HTTP/2 version parser for older libcurl versions (Mike)
73 ## 2.6.0beta2, 2016-09-07
75 + Added http\Client\Curl\User interface for userland event loops
76 + Added http\Url::IGNORE_ERRORS, http\Url::SILENT_ERRORS and http\Url::STDFLAGS
77 + Added http\Client::setDebug(callable $debug)
78 + Added http\Client\Curl\FEATURES constants and namespace
79 + Added http\Client\Curl\VERSIONS constants and namespace
80 + Added share_cookies and share_ssl (libcurl >= 7.23.0) options to http\Client::configure()
81 + http\Client uses curl_share handles to properly share cookies and SSL/TLS sessions between requests
82 + Improved configure checks for default CA bundles
83 + Improved negotiation precision
84 * Fixed regression introduced by http\Params::PARSE_RFC5987: negotiation using the params parser would receive param keys without the trailing asterisk, stripped by http\Params::PARSE_RFC5987.
85 * Fix gh-issue #50: http\Client::dequeue() within http\Client::setDebug() causes segfault (Mike, Maik Wagner)
86 * Fix gh-issue #47: http\Url: Null pointer deref in sanitize_value() (Mike, @rc0r)
87 * Fix gh-issue #45: HTTP/2 response message parsing broken with libcurl >= 7.49.1 (Mike)
88 * Fix gh-issue #43: Joining query with empty original variable in query (Mike, Sander Backus)
89 * Fix gh-issue #42: fatal error when using punycode in URLs (Mike, Sebastian Thielen)
90 * Fix gh-issue #41: Use curl_version_info_data.features when initializing options (Mike)
91 * Fix gh-issue #40: determinde the SSL backend used by curl at runtime (Mike, @rcanavan)
92 * Fix gh-issue #39: Notice: http\Client::enqueue(): Could not set option proxy_service_name (Mike, @rcanavan)
93 * Fix gh-issue #38: Persistent curl handles: error code not properly reset (Mike, @afflerbach)
94 * Fix gh-issue #36: Unexpected cookies sent if persistent_handle_id is used (Mike, @rcanavan, @afflerbach)
95 * Fix gh-issue #34: allow setting multiple headers with the same name (Mike, @rcanavan)
96 * Fix gh-issue #33: allow setting prodyhost request option to NULL (Mike, @rcanavan)
97 * Fix gh-issue #31: add/improve configure checks for default CA bundle/path (Mike, @rcanavan)
100 * Fixed PHP-5.3 compatibility
101 * Fixed recursive calls to the event loop dispatcher
103 ## 2.6.0beta1, 2016-08-22
105 + Added http\Client\Curl\User interface for userland event loops
106 + Added http\Url::IGNORE_ERRORS, http\Url::SILENT_ERRORS and http\Url::STDFLAGS
107 + Added http\Client::setDebug(callable $debug)
108 + Added http\Client\Curl\FEATURES constants and namespace
109 + Added http\Client\Curl\VERSIONS constants and namespace
110 + Added share_cookies and share_ssl (libcurl >= 7.23.0) options to http\Client::configure()
111 + http\Client uses curl_share handles to properly share cookies and SSL/TLS sessions between requests
112 + Improved configure checks for default CA bundles
113 + Improved negotiation precision
114 * Fixed regression introduced by http\Params::PARSE_RFC5987: negotiation using the params parser would receive param keys without the trailing asterisk, stripped by http\Params::PARSE_RFC5987.
115 * Fix gh-issue #50: http\Client::dequeue() within http\Client::setDebug() causes segfault (Mike, Maik Wagner)
116 * Fix gh-issue #47: http\Url: Null pointer deref in sanitize_value() (Mike, @rc0r)
117 * Fix gh-issue #45: HTTP/2 response message parsing broken with libcurl >= 7.49.1 (Mike)
118 * Fix gh-issue #43: Joining query with empty original variable in query (Mike, Sander Backus)
119 * Fix gh-issue #42: fatal error when using punycode in URLs (Mike, Sebastian Thielen)
120 * Fix gh-issue #41: Use curl_version_info_data.features when initializing options (Mike)
121 * Fix gh-issue #40: determinde the SSL backend used by curl at runtime (Mike, @rcanavan)
122 * Fix gh-issue #39: Notice: http\Client::enqueue(): Could not set option proxy_service_name (Mike, @rcanavan)
123 * Fix gh-issue #38: Persistent curl handles: error code not properly reset (Mike, @afflerbach)
124 * Fix gh-issue #36: Unexpected cookies sent if persistent_handle_id is used (Mike, @rcanavan, @afflerbach)
125 * Fix gh-issue #34: allow setting multiple headers with the same name (Mike, @rcanavan)
126 * Fix gh-issue #33: allow setting prodyhost request option to NULL (Mike, @rcanavan)
127 * Fix gh-issue #31: add/improve configure checks for default CA bundle/path (Mike, @rcanavan)
131 * Fix php-bug #71719: Buffer overflow in HTTP url parsing functions (Mike, rc0r)
132 * Fix gh-issue #28: Possible null pointer dereference in php_http_url_mod() (rc0r)
133 * Fix gh-issue #22: Fix PHP5 config.w32 (Jan Ehrhardt)
134 * Fix gh-issue #20: setSslOptions notice with curl 7.43 (Mike, Vitaliy Demidov)
138 * Fixed gh-issue #16: No Content-Length header with empty POST requests
142 * Fixed gh-issue #12: crash on bad url passed to http\Message::setRequestUrl()
143 * The URL parser now fails on empty labels
147 * Fixed regression with HEAD requests always warning about a partial file transfer
148 + Added "path_as_is" request option (libcurl >= 7.42)
152 * Fixed VC11 build (Jan Erhardt)
153 * Fixed gh-issue #2: comparison of obsolete pointers in the header parser (xiaoyjy)
154 * Fixed gh-issue #6: allow RFC1738 unsafe characters in query/fragment
155 * Fixed gh-issue #7: crash with querystring and exception from error handler
156 + SSL certinfo is available for libcurl >= 7.42 with gnutls (openssl has already been since 7.19.1)
157 + Added "falsestart" SSL request option (available with libcurl >= 7.42 and darwinssl/NSS)
158 + Added "service_name" and "proxy_service_name" request options for SPNEGO (available with libcurl >= 7.43)
159 + Enabled "certinfo" transfer info on all supporting SSL backends (OpenSSL: libcurl v7.19.1, NSS: libcurl v7.34.0, GSKit: libcurl v7.39.0, GnuTLS: libcurl v7.42.0)
163 + Added RFC5988 (Web Linking) support to http\Params
164 + Added http\Url::SANITIZE_PATH to default flags of http\Url::mod()
165 * Fixed overly aggressive response caching to only consider 2xx cachable
167 ## 2.5.0RC1, 2015-05-21
169 * Added RFC5988 (Web Linking) support to http\Params
170 * Added http\Url::SANITIZE_PATH to default flags of http\Url::mod()
171 * Fixed overly aggressive response chaching to only consider 2xx cachable
175 * Fixed bug #69357 (HTTP/1.1 100 Continue overriding subsequent 200 response code with PUT request)
179 * Fixed bug 69076 (http\Url throws Exception on empty querystring) (p at wspnr dot com)
180 * Fixed bug 69313 (http\Client doesn't send GET body)
181 + Added libidn2 and UIDNA as fallbacks for IDN support
182 - Deferred warnings/exceptions of the client, so callbacks for the currently failing requests will still be called
186 * Fixed build with PHP <= 5.4 (Remi)
190 * Split off pecl/apfd and pecl/json_post
194 * Fixed bug with http\QueryString::offsetSet() resetting the complete query string
198 * Fixed build on platforms that need stddef.h to define ptrdiff_t (e.g. CentOS 7.5)
202 + Preliminiary HTTP2 support for http\Client (libcurl with nghttp2 support)
203 + Improved performance of HTTP info parser (request/response line)
204 + Improved performance of updating client observers
205 + Improved performance of http\Env\Response output to streams
206 + Improved the error messages of the header parser
207 + Added http\Header\Parser class
208 + Added http\Client::configure() method accepting an array with the following options for libcurl:
209 . maxconnects (int, size of the connection cache)
210 . max_host_connections (int, max number of connections to a single host, libcurl >= 7.30.0)
211 . max_pipeline_length (int, max number of requests in a pipeline, libcurl >= 7.30.0)
212 . max_total_connections (int, max number of simultaneous open connections of this client, libcurl >= 7.30.0)
213 . pipelining (bool, whether to enable HTTP/1.1 pipelining)
214 . chunk_length_penalty_size (int, chunk length threshold for pipelining, libcurl >= 7.30.0)
215 . content_length_penalty_size (int, size threshold for pipelining, libcurl >= 7.30.0)
216 . pipelining_server_bl (array, list of server software names to blacklist for pipelining, libcurl >= 7.30.0)
217 . pipelining_site_bl (array, list of server host names to blacklist for pipelining, libcurl >= 7.30.0)
218 . use_eventloop (bool, whether to use libevent, libcurl+libevent)
219 + Added http\Client::getAvailableOptions() and http\Client::getAvailableConfiguration() methods
220 + Added support for HTTP2 if libcurl was built with nghttp2 support.
221 + Added http\Client\Curl\HTTP_VERSION_2_0 constant (libcurl >= 7.33.0)
222 + Added http\Client\Curl\TLS_AUTH_SRP constant (libcurl >= 7.21.4)
223 + Added pinned_publickey SSL request option (libcurl >= 7.39.0)
224 + Added tlsauthtype, tlsauthuser and tlsauthpass SSL request option (libcurl >= 7.21.4)
225 + Added verifystatus (a.k.a OCSP) SSL request option (libcurl >= 7.41.0)
226 + Added proxyheader request option (libcurl >= 7.37.0)
227 + Added unix_socket_path request option (libcurl >= 7.40.0)
228 * Fixed compress request option
229 * Fixed parsing authorities of CONNECT messages
230 * Fixed parsing Content-Range messages
231 * Fixed http\Env\Response to default to chunked encoding over streams
232 * Fixed superfluous output of Content-Length:0 headers
233 * Fixed persistent easy handles to be only created for persistent multi handles
234 * Fixed the header parser to accept not-yet-complete header lines
235 * Fixed http\Message::toStream() crash in ZTS mode
236 * Fixed the message stream parser to handle intermediary data bigger than 4k
237 * Fixed the message stream parser to handle single header lines without EOL
238 * Fixed http\Message\Body to not generate stat based etags for temporary streams
239 - Deprecated http\Client::enablePipelining(), use http\Client::configure(["pipelining" => true]) instead
240 - Deprecated http\Client::enableEvents(), use http\Client::configure(["use_eventloop" => true]) instead
241 - Removed the cookies entry from the transfer info, wich was very slow and generated a Netscape formatted list of cookies
242 - Changed the header parser to reject illegal characters
245 * Fixed a shutdown crash with chunked encoded stream responses
247 ## 2.3.0RC1, 2015-02-19
249 + Preliminiary HTTP2 support for http\Client (libcurl with nghttp2 support)
250 + Improved performance of HTTP info parser (request/response line)
251 + Improved performance of updating client observers
252 + Improved performance of http\Env\Response output to streams
253 + Improved the error messages of the header parser
254 + Added http\Header\Parser class
255 + Added http\Client::configure() method accepting an array with the following options for libcurl:
256 . maxconnects (int, size of the connection cache)
257 . max_host_connections (int, max number of connections to a single host, libcurl >= 7.30.0)
258 . max_pipeline_length (int, max number of requests in a pipeline, libcurl >= 7.30.0)
259 . max_total_connections (int, max number of simultaneous open connections of this client, libcurl >= 7.30.0)
260 . pipelining (bool, whether to enable HTTP/1.1 pipelining)
261 . chunk_length_penalty_size (int, chunk length threshold for pipelining, libcurl >= 7.30.0)
262 . content_length_penalty_size (int, size threshold for pipelining, libcurl >= 7.30.0)
263 . pipelining_server_bl (array, list of server software names to blacklist for pipelining, libcurl >= 7.30.0)
264 . pipelining_site_bl (array, list of server host names to blacklist for pipelining, libcurl >= 7.30.0)
265 . use_eventloop (bool, whether to use libevent, libcurl+libevent)
266 + Added http\Client::getAvailableOptions() and http\Client::getAvailableConfiguration() methods
267 + Added support for HTTP2 if libcurl was built with nghttp2 support.
268 + Added http\Client\Curl\HTTP_VERSION_2_0 constant (libcurl >= 7.33.0)
269 + Added http\Client\Curl\TLS_AUTH_SRP constant (libcurl >= 7.21.4)
270 + Added pinned_publickey SSL request option (libcurl >= 7.39.0)
271 + Added tlsauthtype, tlsauthuser and tlsauthpass SSL request option (libcurl >= 7.21.4)
272 + Added verifystatus (a.k.a OCSP) SSL request option (libcurl >= 7.41.0)
273 + Added proxyheader request option (libcurl >= 7.37.0)
274 + Added unix_socket_path request option (libcurl >= 7.40.0)
275 * Fixed compress request option
276 * Fixed parsing authorities of CONNECT messages
277 * Fixed parsing Content-Range messages
278 * Fixed http\Env\Response to default to chunked encoding over streams
279 * Fixed superfluous output of Content-Length:0 headers
280 * Fixed persistent easy handles to be only created for persistent multi handles
281 * Fixed the header parser to accept not-yet-complete header lines
282 * Fixed http\Message::toStream() crash in ZTS mode
283 * Fixed the message stream parser to handle intermediary data bigger than 4k
284 * Fixed the message stream parser to handle single header lines without EOL
285 * Fixed http\Message\Body to not generate stat based etags for temporary streams
286 - Deprecated http\Client::enablePipelining(), use http\Client::configure(["pipelining" => true]) instead
287 - Deprecated http\Client::enableEvents(), use http\Client::configure(["use_eventloop" => true]) instead
288 - Removed the cookies entry from the transfer info, wich was very slow and generated a Netscape formatted list of cookies
289 - Changed the header parser to reject illegal characters
293 * Fixed Bug #69000 (http\Url breaks down with very long URL query strings)
297 - var_dump(http\Message) no longer automatically creates an empty body
298 + Added http\Message\Parser class
299 + Made http\Client::once() and http\Client::wait() available when using events
300 + Added http\Url::PARSE_MBLOC, http\Url::PARSE_MBUTF8, http\Url::PARSE_TOIDN and http\Url::PARSE_TOPCT constants
301 + Added http\Env\Response::setCookie()
302 + Added http\Env\Request::getCookie()
304 ## 2.2.0RC1, 2014-11-12
306 - var_dump(http\Message) no longer automatically creates an empty body
307 + Added http\Message\Parser class
308 + Made http\Client::once() and http\Client::wait() available when using events
309 + Added http\Url::PARSE_MBLOC, http\Url::PARSE_MBUTF8, http\Url::PARSE_TOIDN and http\Url::PARSE_TOPCT constants
310 + Added http\Env\Response::setCookie()
311 + Added http\Env\Request::getCookie()
315 * Fixed bug #68353 (QsoSSL support removed in libcurl 7.39)
316 * Fixed bug #68149 (duplicate content-length with libcurl < 7.23)
317 * Fixed bug #66891 (Unexpected HTTP 401 after NTLM authentication)
321 * Fix build with libcurl < 7.26 (Remi)
325 + Added missing request option constants:
326 POSTREDIR_303, AUTH_SPNEGO (libcurl >= 7.38.0), SSL_VERSION_TLSv1_{0,1,2} (libcurl >= 7.34)
327 * Fixed bug #68083 (PUT method not working after DELETE)
328 * Fixed bug #68009 (Segmentation fault after calling exit(0) after a request)
329 * Fixed bug #68000 (Extension does not build on FreeBSD)
333 * Fix httpVersion retrieval on bigendian (Remi)
334 * Fix etag/crc32b on bigendian (Remi)
338 - Removed port and scheme guessing of http\Url for portability
339 * Fixed PHP-5.3 compatibility
340 * Fixed PHP-5.4 compatibility
341 * Fixed possible bus error on shutdown when using events
342 * Fixed sovereignty of clients when using events
343 * Fixed a possible crash with http\Encoding\Stream\Dechunk::decode($unencoded)
344 * Fixed a leak in http\Client\Curl options
345 * Fixed bug #67733 (Compile error with libevent 2.x)
346 + Added RFC5987 support in http\Params
347 + Improved synthetic HTTP message parsing performace for ~20%
348 + Added request options if libcurl has builtin c-ares support:
349 dns_interface, dns_local_ip4, dns_local_ip6 (all libcurl >= 7.33.0)
350 + Added request options:
351 expect_100_timeout (libcurl >= 7.36.0), tcp_nodelay
352 + Added transfer info:
353 curlcode, tls_session (libcurl >= 7.34.0), only available during transfer
355 ## 2.1.0RC3, 2014-08-19
358 * Fixed PHP-5.3 compatibility
359 * Fixed possible bus error on shutdown when using events
360 + Added curlcode transfer info
361 - Removed port and scheme guessing of http\Url for portability
363 ## 2.1.0RC2, 2014-08-05
366 * Fixed a possible crash with http\Encoding\Stream\Dechunk::decode($unencoded)
367 * Fixed a leak in http\Client\Curl options
368 * Fixed PHP-5.4 compatibility
370 ## 2.1.0RC1, 2014-08-01
372 * Fixed bug #67733 (Compile error with libevent 2.x)
373 + Added RFC5987 support in http\Params
374 + Improved synthetic HTTP message parsing performace for ~20%
375 + Added request options if libcurl has builtin c-ares support:
376 dns_interface, dns_local_ip4, dns_local_ip6 (all libcurl >= 7.33.0)
377 + Added request options:
378 expect_100_timeout (libcurl >= 7.36.0)
380 + Added transfer info:
381 tls_session (libcurl >= 7.34.0), only available during transfer
385 * General improvements to the test suite
386 * Fixed http\Env\Response::send() ignoring some write errors
387 * Fixed bug #67528 (RFC compliant default user agent)
388 * Fixed a garbage collector issue with JSON POSTs
389 * Fixed refcount issue and double free of message bodies
390 * Fixed use after free if the http\Client::enqueue() closure returns TRUE
391 * Fixed bug #67584 (http\Client\Response not initialized as response on failure)
395 + Added "uploaded" progress state
396 * Fixed bug #67089 (Segmentaion fault with ZTS)
397 * Fixed compatibility with PHP-5.6+
398 * Fixed re-use of request messages which content length remained untouched when the body was reset
402 * Fix rare crash with uninitialized CURLOPT_HTTPHEADER
403 * Fix build with -Werror=format-security (Remi)
404 * Fix build with extenal libs needed by libcurl
408 * Removed the pecl/event conflict
409 * Fixed bug #66388 (Crash on POST with Content-Length:0 and untouched body)
417 * Fixed bug #66250 (shutdown crash as shared extension)
421 * Fixed a bug with multiple ob_start(http\Env\Response) while replacing the body
422 * Fixed build on Windows with libevent2
426 Extended HTTP support. Again.
428 Keep in mind that it's got the major version 2, because it's incompatible with pecl_http v1.
430 ## 2.0.0beta5, 2013-08-12
432 Extended HTTP support. Again. Keep in mind that it's got the major version 2, because it's incompatible with pecl_http v1.
434 * Introduces the http namespace.
435 * Message bodies have been remodeled to use PHP temporary streams instead of in-memory buffers.
436 * The utterly misunderstood HttpResponse class has been reimplemented as http\Env\Response inheriting http\Message.
437 * Currently, there's only one Exception class left, http\Exception.
438 * Errors triggered by the extension can be configured statically by http\Object::$defaultErrorHandling or inherited http\Object->errorHandling.
439 * The request ecosystem has been modularized to support different libraries, though for the moment only libcurl is supported.
441 ## 2.0.0beta4, 2012-12-31
443 ! >80% test coverage http://goo.gl/VmyIW
444 * Fixed build with libcurl <= 7.21.3
445 * Fixed var_dump of http\Message with inherited userland properties with increased access level
446 + Added http\Header::getParams()
447 + Added simple support for escapes and quotes in the params parser
448 + Added support for sending http\Env\Response over PHP streams
449 + Added message body reference counting
451 ## 2.0.0beta3, 2012-12-13
453 ! >80% test coverage http://goo.gl/YCV74
454 * Fixed http\Env\Response throttling
455 * Fixed http\Env\Response caching by last-modified
456 * Fixed http\Message::addBody()
457 * Fixed http\Message::parentMessage write access
458 * Fixed crash with freed but not nulled event_base pointer
459 * Fixed crash with null pointer dereference on http\Encoding\Stream::flush()
460 * Fixed some memory leaks
461 + Added http\Header::negotiate()
462 + Added http\Header::parse()
464 ## 2.0.0beta2, 2012-11-29
467 * Fixed http\Request\Pool with libevent2
468 * Fixed http\Env\Request::getFiles() with multiple-file-uploads
469 * Fixed PHP-5.3 compatibility
470 * Fixed reference handling of http\Message\Body::getResource()
471 * Fixed reading stream filters to correctly detect EOF of tmp and mem streams
472 - Change: merge message headers with the same key
473 - Change: the stream message parser can optionally return after each message
474 - Change: you have to care yourself for Content headers if a message's body has a reading stream filter attached
475 + Added http\Env::getResponseStatusForAllCodes()
477 ## 2.0.0beta1, 2012-10-11
479 * PHP-5.3 compatibility by Anatoly Belsky
480 * Fixed http\Client's history handling
481 * Disallow serialization of non-serializable objects
482 * Fixed parsing of folded headers
483 * Fixed the parsing HTTP messages from streams
484 * Fixed leak in persistent handles cleanup routine
485 + Added http\Url::SANITIZE_PATH; URL paths are not sanitized by default anymore
486 + Added JSON Content-Type handler for request body processing if ext/json is present
487 + Added missing IANA HTTP response codes
488 + Added http\Message\Body::getResource()
489 + Added QueryString proxy methods to http\Env\Request
490 + Added Serializable to http\Message\Body's interfaces
492 ## 2.0.0alpha1, 2012-04-13
494 + Added http\Client\AbstractClient::request(string method, string url[, array headers=null[, mixed body=null[, array options=null]]])
495 + Added constants http\Params::PARSE_RAW, ::PARSE_DEFAULT, ::PARSE_URLENCODED, ::PARSE_DIMENSION, ::PARSE_QUERY
496 + Added fourth parameter 'flags' to http\Params' constructor, which defaults to http\Params::PARSE_DEFAULT
497 * Fixed bug #61444 (query string converts . to _ in param names)
499 ## 2.0.0dev10, 2012-03-30
501 + This release contains the http\Request to http\Client refactoring triggered by Benjamin Eberlei. Many thanks.
503 ## 2.0.0dev9, 2012-03-23
505 + Added population of $_POST and $_FILES for non-POST requests
506 - Renamed http\Env\Request::getPost() to ::getForm()
507 - Changed http\Env\Response::setContentDisposition() to take an http\Params like array as argument
508 - Removed http\Env\Response::CONTENT_DISPOSOTION_* constants
509 - Removed http\Request\Method class; request methods are now used as simple strings
511 ## 2.0.0dev8, 2012-03-16
513 * Fixed build failure and compiler warnings
514 * Fixed logical errors in http\Env\Response::isCachedBy{Etag,LastModified}()
515 * Fixed memory leaks in http\Env\Response::isCachedByLastModified()
516 * Fixed memory leaks in http\Env::getResponseHeader()
517 * Fixed erroneous trailing CRLF of http\Message strings
518 - Renamed http\Message\Body::add() to ::addForm()
519 + Added http\Message\Body::addPart(http\Message $part)
520 + Added http\Env\Response::__invoke() output buffering handler
522 ## 2.0.0dev7, 2012-03-09
524 + Added multipart support to http\Message, which can now splitMultipartBody()
525 to a http\Message chain, f.e. of a ranges response or file upload request.
526 + Added primitive quoting/escaping capabilities to http\Params.
527 + Reworked and improved negotiation support, added asterisk (*) matching etc.
529 ## 2.0.0dev6, 2012-03-01
531 + Added stream parsing capability to http\Message
532 + Added http\Env\Request methods: getQuery(), getPost(), getFiles()
533 * Changed http\Env\Response to only cache responses to GET or HEAD requests without authorization
534 * Fixed possible crash when http\Url was initialized with empty urls
536 ## 2.0.0dev5, 2012-02-17
538 * Improved test coverage [1] and fixed a lot of issues with the cookie, params, querystring,
539 persistent handles, request factory, etag, stream filters, encoding streams, negotiation
540 and HTTP message info code.
542 [1] http://dev.iworks.at/ext-http/lcov/ext/http/index.html
544 ## 2.0.0dev4, 2012-01-23
546 This is to become v2 of the known pecl_http extension.
547 It is completely incompatible to previous version.
548 Try it, or let it be. If you are not sure, let it be. Really.
550 List of changes (TBD):
551 * Everything lives below the http namespace
552 * The message body is implemented as a temp stream instead of a chunk of memory
553 * The utterly misunderstood HttpResponse class has been reimplemented in the http\env namespace
554 * There's only http\Exception
555 * Every instance follows http\Object::$defaultErrorHandling or inherited http\Object->errorHandling, but only for errors generated by the extension itself
556 * You have to use the http\Request\Factory to create your requests/pools/datashares
558 ## 2.0.0dev3, 2012-01-16
560 This is to become v2 of the known pecl_http extension.
561 It is completely incompatible to previous version.
562 Try it, or let it be. If you are not sure, let it be. Really.
564 List of changes (TBD):
565 * Everything lives below the http namespace
566 * The message body is implemented as a temp stream instead of a chunk of memory
567 * The utterly misunderstood HttpResponse class has been reimplemented in the http\env namespace
568 * There's only http\Exception
569 * Every instance follows http\Object::$defaultErrorHandling or inherited http\Object->errorHandling, but only for errors generated by the extension itself
570 * You have to use the http\Request\Factory to create your requests/pools/datashares
572 ## 2.0.0dev2, 2011-06-14
574 This is to become v2 of the known pecl_http extension.
575 It is completely incompatible to previous version.
576 Try it, or let it be. If you are not sure, let it be. Really.
578 List of changes (TBD):
579 * Everything lives below the http namespace
580 * Supported request libraries: curl, neon
581 * The message body is implemented as a temp stream instead of a chunk of memory
582 * The utterly misunderstood HttpResponse class has been reimplemented in the http\env namespace
583 * There's only http\Exception
584 * Every instance follows http\Object::$defaultErrorHandling or inherited http\Object->errorHandling, but only for errors generated by the extension itself
586 ## 2.0.0dev1, 2011-06-02
588 This is to become v2 of the known pecl_http extension.
589 It is completely incompatible to previous version.
590 Try it, or let it be. If you are not sure, let it be. Really.
592 List of changes (TBD):
593 * Everything lives below the http namespace
594 * Supported request libraries: curl, neon
595 * The message body is implemented as a temp stream instead of a chunk of memory
596 * The utterly misunderstood HttpResponse class has been reimplemented in the http\env namespace
597 * There's only http\Exception
598 * Every instance follows http\Object::$defaultErrorHandling or inherited http\Object->errorHandling, but only for errors generated by the extension itself