From 26591cefa8d85dced14547a0fb621b9a289ef2de Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Thu, 29 Dec 2005 14:28:27 +0000 Subject: [PATCH] - revised request_method api --- http.c | 32 ++++--- http_functions.c | 6 +- http_request_method_api.c | 155 +++++++++++++++++++++++----------- package.xml | 45 +++++----- php_http.h | 7 +- php_http_request_method_api.h | 15 +++- tests/HttpRequest_002.phpt | 1 - tests/HttpRequest_004.phpt | 12 +-- tests/HttpRequest_006.phpt | 9 +- tests/HttpRequest_008.phpt | 32 +++++++ tests/request_gzip.phpt | 7 +- tests/request_methods.phpt | 1 + 12 files changed, 207 insertions(+), 115 deletions(-) create mode 100644 tests/HttpRequest_008.phpt diff --git a/http.c b/http.c index c9e6931..d22499c 100644 --- a/http.c +++ b/http.c @@ -167,7 +167,6 @@ static void http_globals_init_once(zend_http_globals *G) static inline void _http_globals_init(zend_http_globals *G TSRMLS_DC) { G->send.buffer_size = HTTP_SENDBUF_SIZE; - zend_hash_init(&G->request.methods.custom, 0, NULL, ZVAL_PTR_DTOR, 0); } #define http_globals_free(g) _http_globals_free((g) TSRMLS_CC) @@ -175,7 +174,6 @@ static inline void _http_globals_free(zend_http_globals *G TSRMLS_DC) { STR_SET(G->send.content_type, NULL); STR_SET(G->send.unquoted_etag, NULL); - zend_hash_destroy(&G->request.methods.custom); } /* }}} */ @@ -290,11 +288,13 @@ PHP_RINIT_FUNCTION(http) http_globals_init(HTTP_GLOBALS); + if ( (SUCCESS != PHP_RINIT_CALL(http_request_method)) #ifdef HTTP_HAVE_ZLIB - if (SUCCESS != PHP_RINIT_CALL(http_encoding)) { + || (SUCCESS != PHP_RINIT_CALL(http_encoding)) +#endif + ) { return FAILURE; } -#endif return SUCCESS; } @@ -305,14 +305,11 @@ PHP_RSHUTDOWN_FUNCTION(http) { STATUS status = SUCCESS; - if ( + if ( (SUCCESS != PHP_RSHUTDOWN_CALL(http_request_method)) #ifdef HTTP_HAVE_ZLIB - (SUCCESS != PHP_RSHUTDOWN_CALL(http_encoding)) || -#endif -#if defined(ZEND_ENGINE_2) && defined(HTTP_HAVE_CURL) - (SUCCESS != PHP_RSHUTDOWN_CALL(http_request_method)) || + || (SUCCESS != PHP_RSHUTDOWN_CALL(http_encoding)) #endif - 0) { + ) { status = FAILURE; } @@ -375,19 +372,20 @@ PHP_MINFO_FUNCTION(http) php_info_print_table_start(); php_info_print_table_colspan_header(2, "Request Methods"); { - unsigned i; - HashPosition pos; - zval **custom_method; + int i; + getGlobals(G); + struct _entry {char *name; char *cnst;} *entry; phpstr *known_request_methods = phpstr_new(); phpstr *custom_request_methods = phpstr_new(); - for (i = HTTP_NO_REQUEST_METHOD+1; i < HTTP_MAX_REQUEST_METHOD; ++i) { + for (i = HTTP_MIN_REQUEST_METHOD; i < HTTP_MAX_REQUEST_METHOD; ++i) { phpstr_appendl(known_request_methods, http_request_method_name(i)); phpstr_appends(known_request_methods, ", "); } - FOREACH_HASH_VAL(pos, &HTTP_G(request).methods.custom, custom_method) { - phpstr_append(custom_request_methods, Z_STRVAL_PP(custom_method), Z_STRLEN_PP(custom_method)); - phpstr_appends(custom_request_methods, ", "); + for (i = 0; i < G->request.methods.custom.count; ++i) { + if ((entry = ((struct _entry **) G->request.methods.custom.entries)[i])) { + phpstr_appendf(custom_request_methods, "%s, ", entry->name); + } } phpstr_append(known_request_methods, PHPSTR_VAL(custom_request_methods), PHPSTR_LEN(custom_request_methods)); diff --git a/http_functions.c b/http_functions.c index 7f7c4d6..a1620e6 100644 --- a/http_functions.c +++ b/http_functions.c @@ -1462,7 +1462,7 @@ PHP_FUNCTION(http_request_method_unregister) if (is_numeric_string(Z_STRVAL_P(method), Z_STRLEN_P(method), NULL, NULL, 1)) { convert_to_long(method); } else { - ulong mn; + int mn; if (!(mn = http_request_method_exists(1, 0, Z_STRVAL_P(method)))) { RETURN_FALSE; } @@ -1505,7 +1505,7 @@ PHP_FUNCTION(http_request_method_exists) RETURN_LONG((long) http_request_method_exists(1, 0, Z_STRVAL_P(method))); } case IS_LONG: - RETURN_LONG((long) http_request_method_exists(0, Z_LVAL_P(method), NULL)); + RETURN_LONG((long) http_request_method_exists(0, (int) Z_LVAL_P(method), NULL)); default: RETURN_FALSE; } @@ -1530,7 +1530,7 @@ PHP_FUNCTION(http_request_method_name) RETURN_FALSE; } - RETURN_STRING(estrdup(http_request_method_name((ulong) method)), 0); + RETURN_STRING(estrdup(http_request_method_name((int) method)), 0); } } /* }}} */ diff --git a/http_request_method_api.c b/http_request_method_api.c index ead74ac..3480c3b 100644 --- a/http_request_method_api.c +++ b/http_request_method_api.c @@ -102,13 +102,25 @@ PHP_MINIT_FUNCTION(http_request_method) return SUCCESS; } +PHP_RINIT_FUNCTION(http_request_method) +{ + HTTP_G(request).methods.custom.entries = ecalloc(1, sizeof(http_request_method_entry *)); + + return SUCCESS; +} + PHP_RSHUTDOWN_FUNCTION(http_request_method) { - int i, c = zend_hash_num_elements(&HTTP_G(request).methods.custom); + int i; + getGlobals(G); + http_request_method_entry **ptr = G->request.methods.custom.entries; - for (i = 0; i < c; ++i) { - http_request_method_unregister(HTTP_MAX_REQUEST_METHOD + i); + for (i = 0; i < G->request.methods.custom.count; ++i) { + if (ptr[i]) { + http_request_method_unregister(HTTP_CUSTOM_REQUEST_METHOD_START + i); + } } + efree(G->request.methods.custom.entries); return SUCCESS; } @@ -116,95 +128,139 @@ PHP_RSHUTDOWN_FUNCTION(http_request_method) /* {{{ char *http_request_method_name(http_request_method) */ PHP_HTTP_API const char *_http_request_method_name(http_request_method m TSRMLS_DC) { - zval **meth; + getGlobals(G); + http_request_method_entry **ptr = G->request.methods.custom.entries; if (HTTP_STD_REQUEST_METHOD(m)) { return http_request_methods[m]; } - if (SUCCESS == zend_hash_index_find(&HTTP_G(request).methods.custom, HTTP_CUSTOM_REQUEST_METHOD(m), (void **) &meth)) { - return Z_STRVAL_PP(meth); + if ( (HTTP_CUSTOM_REQUEST_METHOD(m) >= 0) && + (HTTP_CUSTOM_REQUEST_METHOD(m) < G->request.methods.custom.count) && + (ptr[HTTP_CUSTOM_REQUEST_METHOD(m)])) { + return ptr[HTTP_CUSTOM_REQUEST_METHOD(m)]->name; } return http_request_methods[0]; } /* }}} */ -/* {{{ ulong http_request_method_exists(zend_bool, ulong, char *) */ -PHP_HTTP_API ulong _http_request_method_exists(zend_bool by_name, ulong id, const char *name TSRMLS_DC) +/* {{{ int http_request_method_exists(zend_bool, ulong, char *) */ +PHP_HTTP_API int _http_request_method_exists(zend_bool by_name, http_request_method id, const char *name TSRMLS_DC) { + int i; + getGlobals(G); + http_request_method_entry **ptr = G->request.methods.custom.entries; + if (by_name) { - unsigned i; - - for (i = HTTP_NO_REQUEST_METHOD + 1; i < HTTP_MAX_REQUEST_METHOD; ++i) { - if (!strcmp(name, http_request_methods[i])) { + for (i = HTTP_MIN_REQUEST_METHOD; i < HTTP_MAX_REQUEST_METHOD; ++i) { + if (!strcasecmp(name, http_request_methods[i])) { return i; } } - { - zval **data; - char *key; - ulong idx; - HashPosition pos; - - FOREACH_HASH_KEYVAL(pos, &HTTP_G(request).methods.custom, key, idx, data) { - if (!strcmp(name, Z_STRVAL_PP(data))) { - return idx + HTTP_MAX_REQUEST_METHOD; - } + for (i = 0; i < G->request.methods.custom.count; ++i) { + if (ptr[i] && !strcasecmp(name, ptr[i]->name)) { + return HTTP_CUSTOM_REQUEST_METHOD_START + i; } } - return 0; - } else { - return HTTP_STD_REQUEST_METHOD(id) || zend_hash_index_exists(&HTTP_G(request).methods.custom, HTTP_CUSTOM_REQUEST_METHOD(id)) ? id : 0; + } else if (HTTP_STD_REQUEST_METHOD(id)) { + return id; + } else if ( (HTTP_CUSTOM_REQUEST_METHOD(id) >= 0) && + (HTTP_CUSTOM_REQUEST_METHOD(id) < G->request.methods.custom.count) && + (ptr[HTTP_CUSTOM_REQUEST_METHOD(id)])) { + return id; } + + return 0; } /* }}} */ -/* {{{ ulong http_request_method_register(char *) */ -PHP_HTTP_API ulong _http_request_method_register(const char *method_name, size_t method_name_len TSRMLS_DC) +/* {{{ int http_request_method_register(char *) */ +PHP_HTTP_API int _http_request_method_register(const char *method_name, int method_name_len TSRMLS_DC) { - zval array; - char *http_method, *method; - ulong i, meth_num = HTTP_G(request).methods.custom.nNextFreeElement + HTTP_MAX_REQUEST_METHOD; - + int i, meth_num; + char *http_method, *method, *mconst; + getGlobals(G); + http_request_method_entry **ptr = G->request.methods.custom.entries; + + if (!isalpha(*method_name)) { + http_error_ex(HE_WARNING, HTTP_E_REQUEST_METHOD, "Request method does not start with a character (%s)", method_name); + return 0; + } + + if (http_request_method_exists(1, 0, method_name)) { + http_error_ex(HE_WARNING, HTTP_E_REQUEST_METHOD, "Request method does already exist (%s)", method_name); + return 0; + } + method = emalloc(method_name_len + 1); + mconst = emalloc(method_name_len + 1); for (i = 0; i < method_name_len; ++i) { - method[i] = toupper(method_name[i]); + switch (method_name[i]) + { + case '-': + method[i] = '-'; + mconst[i] = '_'; + break; + + default: + if (!isalnum(method_name[i])) { + efree(method); + efree(mconst); + http_error_ex(HE_WARNING, HTTP_E_REQUEST_METHOD, "Request method contains illegal characters (%s)", method_name); + return 0; + } + mconst[i] = method[i] = toupper(method_name[i]); + break; + } } method[method_name_len] = '\0'; + mconst[method_name_len] = '\0'; - INIT_ZARR(array, &HTTP_G(request).methods.custom); - add_next_index_stringl(&array, method, method_name_len, 0); + ptr = erealloc(ptr, sizeof(http_request_method_entry *) * (G->request.methods.custom.count + 1)); + G->request.methods.custom.entries = ptr; + ptr[G->request.methods.custom.count] = emalloc(sizeof(http_request_method_entry)); + ptr[G->request.methods.custom.count]->name = method; + ptr[G->request.methods.custom.count]->cnst = mconst; + meth_num = HTTP_CUSTOM_REQUEST_METHOD_START + G->request.methods.custom.count++; - method_name_len = spprintf(&http_method, 0, "HTTP_METH_%s", method); + method_name_len = spprintf(&http_method, 0, "HTTP_METH_%s", mconst); zend_register_long_constant(http_method, method_name_len + 1, meth_num, CONST_CS, http_module_number TSRMLS_CC); efree(http_method); #if defined(ZEND_ENGINE_2) && defined(HTTP_HAVE_CURL) && !defined(WONKY) - method_name_len = spprintf(&http_method, 0, "METH_%s", method); + method_name_len = spprintf(&http_method, 0, "METH_%s", mconst); zend_declare_class_constant_long(http_request_object_ce, http_method, method_name_len, meth_num TSRMLS_CC); efree(http_method); #endif - + return meth_num; } /* }}} */ -/* {{{ STATUS http_request_method_unregister(usngigned long) */ -PHP_HTTP_API STATUS _http_request_method_unregister(ulong method TSRMLS_DC) +/* {{{ STATUS http_request_method_unregister(int) */ +PHP_HTTP_API STATUS _http_request_method_unregister(int method TSRMLS_DC) { - zval **zmethod; char *http_method; int method_len; - - if (SUCCESS != zend_hash_index_find(&HTTP_G(request).methods.custom, HTTP_CUSTOM_REQUEST_METHOD(method), (void **) &zmethod)) { - http_error_ex(HE_NOTICE, HTTP_E_REQUEST_METHOD, "Request method with id %lu does not exist", method); + getGlobals(G); + http_request_method_entry **ptr = G->request.methods.custom.entries; + + if (HTTP_STD_REQUEST_METHOD(method)) { + http_error_ex(HE_WARNING, HTTP_E_REQUEST_METHOD, "Standard request methods cannot be unregistered"); return FAILURE; } + if ( (HTTP_CUSTOM_REQUEST_METHOD(method) < 0) || + (HTTP_CUSTOM_REQUEST_METHOD(method) > G->request.methods.custom.count) || + (!ptr[HTTP_CUSTOM_REQUEST_METHOD(method)])) { + http_error_ex(HE_NOTICE, HTTP_E_REQUEST_METHOD, "Custom request method with id %lu does not exist", method); + return FAILURE; + } + #if defined(ZEND_ENGINE_2) && defined(HTTP_HAVE_CURL) && !defined(WONKY) - method_len = spprintf(&http_method, 0, "METH_%s", Z_STRVAL_PP(zmethod)); - if ((SUCCESS != zend_hash_del(&http_request_object_ce->constants_table, http_method, method_len + 1))) { + method_len = spprintf(&http_method, 0, "METH_%s", ptr[HTTP_CUSTOM_REQUEST_METHOD(method)]->cnst); + if (SUCCESS != zend_hash_del(&http_request_object_ce->constants_table, http_method, method_len + 1)) { http_error_ex(HE_NOTICE, HTTP_E_REQUEST_METHOD, "Could not unregister request method: HttpRequest::%s", http_method); efree(http_method); return FAILURE; @@ -212,15 +268,18 @@ PHP_HTTP_API STATUS _http_request_method_unregister(ulong method TSRMLS_DC) efree(http_method); #endif - method_len = spprintf(&http_method, 0, "HTTP_METH_%s", Z_STRVAL_PP(zmethod)); - if ( (SUCCESS != zend_hash_index_del(&HTTP_G(request).methods.custom, HTTP_CUSTOM_REQUEST_METHOD(method))) - || (SUCCESS != zend_hash_del(EG(zend_constants), http_method, method_len + 1))) { + method_len = spprintf(&http_method, 0, "HTTP_METH_%s", ptr[HTTP_CUSTOM_REQUEST_METHOD(method)]->cnst); + if (SUCCESS != zend_hash_del(EG(zend_constants), http_method, method_len + 1)) { http_error_ex(HE_NOTICE, HTTP_E_REQUEST_METHOD, "Could not unregister request method: %s", http_method); efree(http_method); return FAILURE; } efree(http_method); + efree(ptr[HTTP_CUSTOM_REQUEST_METHOD(method)]->name); + efree(ptr[HTTP_CUSTOM_REQUEST_METHOD(method)]->cnst); + STR_SET(ptr[HTTP_CUSTOM_REQUEST_METHOD(method)], NULL); + return SUCCESS; } /* }}} */ diff --git a/package.xml b/package.xml index cfff081..1998bc8 100644 --- a/package.xml +++ b/package.xml @@ -15,7 +15,11 @@ It provides powerful request functionality, if built with CURL support. Parallel requests are available for PHP-5 and greater. PHP-5 classes: -HttpUtil, HttpMessage, HttpRequest, HttpRequestPool; HttpResponse (PHP-5.1) +HttpUtil, HttpMessage, HttpRequest, HttpRequestPool, +HttpDeflateStream, HttpInflateStream + +PHP-5.1 classes: +HttpResponse @@ -26,30 +30,18 @@ HttpUtil, HttpMessage, HttpRequest, HttpRequestPool; HttpResponse (PHP-5.1) - 0.20.0 - 2005-12-15 + 0.21.0 + 2005-12-27 BSD, revised beta - ! Request functionality requires libcurl >= 7.12.3 now + ! Encodings functionality requires libz version 1.2.0.4 or greater -+ Added 'bodyonly' request option -+ Added IOCTL callback for cURL -+ Added ssl_engines array and cookies array to the request info array -+ Added http_parse_cookie() to parse Set-Cookie headers ++ Added HttpDeflateStream and HttpInflateStream classes ++ Added ob_deflatehandler and ob_inflatehandler -- Renamed http_connectcode to connect_code in the request info array -- Enable "original headers" previously stripped off by the message parser: - o X-Original-Transfer-Encoding (Transfer-Encoding) - o X-Original-Content-Encoding (Content-Encoding) - o X-Original-Content-Length (Content-Length) -- RequestExceptions thrown by HttpRequestPool::__construct() and send() are - now wrapped into the HttpRequestPoolException object's $exceptionStack property -- Removed http_compress() and http_uncompress() (http_deflate/inflate ambiguity) +- Changed HttpRequest properties to be private -* Fixed bug which caused GZIP encoded archives to be decoded -* Fixed bug with DEFLATE encoded response messages -* Fixed several memory leaks and inconspicuous access violations -* Fixed some logical errors in the uri builder +* Fixed a lot of memory corruptions within HttpRequest @@ -73,13 +65,13 @@ HttpUtil, HttpMessage, HttpRequest, HttpRequestPool; HttpResponse (PHP-5.1) - - - + + + @@ -89,6 +81,7 @@ HttpUtil, HttpMessage, HttpRequest, HttpRequestPool; HttpResponse (PHP-5.1) + @@ -114,9 +107,11 @@ HttpUtil, HttpMessage, HttpRequest, HttpRequestPool; HttpResponse (PHP-5.1) + + @@ -182,11 +177,13 @@ HttpUtil, HttpMessage, HttpRequest, HttpRequestPool; HttpResponse (PHP-5.1) + + @@ -209,10 +206,12 @@ HttpUtil, HttpMessage, HttpRequest, HttpRequestPool; HttpResponse (PHP-5.1) + + diff --git a/php_http.h b/php_http.h index b0a0a14..58f191e 100644 --- a/php_http.h +++ b/php_http.h @@ -93,7 +93,10 @@ ZEND_BEGIN_MODULE_GLOBALS(http) struct _http_globals_request { struct _http_globals_request_methods { char *allowed; - HashTable custom; + struct { + int count; + void *entries; + } custom; } methods; } request; @@ -115,7 +118,7 @@ ZEND_EXTERN_MODULE_GLOBALS(http); # define HTTP_G(v) (http_globals.v) # define HTTP_GLOBALS (&http_globals) #endif -#define getGlobals(G) zend_http_globals *G = HTTP_GLOBALS; +#define getGlobals(G) zend_http_globals *G = HTTP_GLOBALS PHP_FUNCTION(http_test); PHP_FUNCTION(http_date); diff --git a/php_http_request_method_api.h b/php_http_request_method_api.h index 88f79d5..179e52e 100644 --- a/php_http_request_method_api.h +++ b/php_http_request_method_api.h @@ -51,23 +51,32 @@ typedef enum { HTTP_MAX_REQUEST_METHOD = 28 } http_request_method; +#define HTTP_MIN_REQUEST_METHOD (HTTP_NO_REQUEST_METHOD + 1) +#define HTTP_CUSTOM_REQUEST_METHOD_START HTTP_MAX_REQUEST_METHOD + +typedef struct { + char *name; + char *cnst; +} http_request_method_entry; + #define HTTP_STD_REQUEST_METHOD(m) ((m > HTTP_NO_REQUEST_METHOD) && (m < HTTP_MAX_REQUEST_METHOD)) #define HTTP_CUSTOM_REQUEST_METHOD(m) (m - HTTP_MAX_REQUEST_METHOD) extern PHP_MINIT_FUNCTION(http_request_method); +extern PHP_RINIT_FUNCTION(http_request_method); extern PHP_RSHUTDOWN_FUNCTION(http_request_method); #define http_request_method_name(m) _http_request_method_name((m) TSRMLS_CC) PHP_HTTP_API const char *_http_request_method_name(http_request_method m TSRMLS_DC); #define http_request_method_exists(u, l, c) _http_request_method_exists((u), (l), (c) TSRMLS_CC) -PHP_HTTP_API ulong _http_request_method_exists(zend_bool by_name, ulong id, const char *name TSRMLS_DC); +PHP_HTTP_API int _http_request_method_exists(zend_bool by_name, http_request_method id, const char *name TSRMLS_DC); #define http_request_method_register(m, l) _http_request_method_register((m), (l) TSRMLS_CC) -PHP_HTTP_API ulong _http_request_method_register(const char *method, size_t method_name_len TSRMLS_DC); +PHP_HTTP_API int _http_request_method_register(const char *method, int method_name_len TSRMLS_DC); #define http_request_method_unregister(mn) _http_request_method_unregister((mn) TSRMLS_CC) -PHP_HTTP_API STATUS _http_request_method_unregister(ulong method TSRMLS_DC); +PHP_HTTP_API STATUS _http_request_method_unregister(int method TSRMLS_DC); #endif diff --git a/tests/HttpRequest_002.phpt b/tests/HttpRequest_002.phpt index 5913f8c..eca6d02 100644 --- a/tests/HttpRequest_002.phpt +++ b/tests/HttpRequest_002.phpt @@ -78,6 +78,5 @@ Array ) ) - int(200) Done diff --git a/tests/HttpRequest_004.phpt b/tests/HttpRequest_004.phpt index f6094bb..a9ade65 100644 --- a/tests/HttpRequest_004.phpt +++ b/tests/HttpRequest_004.phpt @@ -42,7 +42,7 @@ echo "Done\n"; %sTEST First Request -string(150) "Array +string(149) "Array ( [int] => 1 [dbl] => 3.1415926535898 @@ -50,7 +50,6 @@ string(150) "Array [nil] => ) string(44) "int=1&dbl=3.1415926535898&str=something&nil=" - " array(2) { [0]=> @@ -70,7 +69,7 @@ array(2) { } Second Request -string(270) "Array +string(269) "Array ( [0] => Array ( @@ -86,7 +85,6 @@ string(270) "Array ) string(56) "0[int]=1&0[dbl]=3.1415926535898&1[str]=something&1[nil]=" - " array(2) { [0]=> @@ -106,7 +104,7 @@ array(2) { } Third Request -string(287) "Array +string(286) "Array ( [0] => Array ( @@ -123,7 +121,6 @@ string(287) "Array [x] => X ) string(60) "0[int]=1&0[dbl]=3.1415926535898&1[str]=something&1[nil]=&x=X" - " array(2) { [0]=> @@ -143,8 +140,7 @@ array(2) { } Fourth Request -string(14) "string(0) "" - +string(13) "string(0) "" " array(2) { [0]=> diff --git a/tests/HttpRequest_006.phpt b/tests/HttpRequest_006.phpt index 57eda66..5f933b7 100644 --- a/tests/HttpRequest_006.phpt +++ b/tests/HttpRequest_006.phpt @@ -39,7 +39,7 @@ object(HttpMessage)#%d (%d) { %s } ["body:protected"]=> - string(310) "string(294) " + string(309) "string(294) " testMethod @@ -58,7 +58,6 @@ object(HttpMessage)#%d (%d) { " - " } object(HttpMessage)#%d (%d) { @@ -79,7 +78,7 @@ object(HttpMessage)#%d (%d) { %s } ["body:protected"]=> - string(310) "string(294) " + string(309) "string(294) " testMethod @@ -98,7 +97,6 @@ object(HttpMessage)#%d (%d) { " - " } object(HttpMessage)#%d (%d) { @@ -119,7 +117,7 @@ object(HttpMessage)#%d (%d) { %s } ["body:protected"]=> - string(310) "string(294) " + string(309) "string(294) " testMethod @@ -138,7 +136,6 @@ object(HttpMessage)#%d (%d) { " - " } Done diff --git a/tests/HttpRequest_008.phpt b/tests/HttpRequest_008.phpt new file mode 100644 index 0000000..bcb16ec --- /dev/null +++ b/tests/HttpRequest_008.phpt @@ -0,0 +1,32 @@ +--TEST-- +HttpRequest custom request method +--SKIPIF-- + +--FILE-- +setContentType('text/plain'); +$r->setRawPostData('Yep, this is FOOBAR!'); +var_dump($r->send()->getResponseCode()); +var_dump($r->getRawRequestMessage()); + +echo "Done\n"; +?> +--EXPECTF-- +%sTEST +int(200) +string(189) "FOOBAR /.print_request.php HTTP/1.1 +User-Agent: %s +Host: dev.iworks.at +Accept: */* +Content-Type: text/plain +Content-Length: 20 + +Yep, this is FOOBAR!" +Done diff --git a/tests/request_gzip.phpt b/tests/request_gzip.phpt index c947f62..6f78eda 100644 --- a/tests/request_gzip.phpt +++ b/tests/request_gzip.phpt @@ -30,20 +30,19 @@ object(stdClass)#%d (%d) { ["Vary"]=> string(15) "Accept-Encoding" ["Content-Length"]=> - string(2) "27" + string(2) "26" ["Content-Type"]=> string(9) "text/html" ["X-Original-Content-Encoding"]=> string(4) "gzip" ["X-Original-Content-Length"]=> - string(2) "52" + string(2) "51" } ["body"]=> - string(27) "Array + string(26) "Array ( [gzip] => 1 ) - " ["parentMessage"]=> NULL diff --git a/tests/request_methods.phpt b/tests/request_methods.phpt index 6efb865..2832c80 100644 --- a/tests/request_methods.phpt +++ b/tests/request_methods.phpt @@ -26,6 +26,7 @@ for ($i = 0; $i < 5; ++$i) { } echo "Done\n"; +?> --EXPECTF-- %sTEST int(0) -- 2.30.2