X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_http_curl_client.c;h=01678d8c2d0a66d1f981f5ec0b36c47633226197;hb=287edcbfb698ff402588f7057dae0bc994d6e8e4;hp=ce47f6b2163fb8caa1be17cdb761fd1104fe14c1;hpb=bd80b17b026a00a254ee8693cd7bacf1ebdec4cf;p=m6w6%2Fext-http diff --git a/php_http_curl_client.c b/php_http_curl_client.c index ce47f6b..01678d8 100644 --- a/php_http_curl_client.c +++ b/php_http_curl_client.c @@ -175,15 +175,22 @@ static int php_http_curl_client_raw_callback(CURL *ch, curl_infotype type, char switch (type) { case CURLINFO_HEADER_IN: case CURLINFO_DATA_IN: - case CURLINFO_HEADER_OUT: - case CURLINFO_DATA_OUT: - php_http_buffer_append(h->buffer, data, length); + php_http_buffer_append(h->response.buffer, data, length); if (curl->options.redirects) { flags |= PHP_HTTP_MESSAGE_PARSER_EMPTY_REDIRECTS; } - if (PHP_HTTP_MESSAGE_PARSER_STATE_FAILURE == php_http_message_parser_parse(h->parser, h->buffer, flags, &h->message)) { + if (PHP_HTTP_MESSAGE_PARSER_STATE_FAILURE == php_http_message_parser_parse(h->response.parser, h->response.buffer, flags, &h->response.message)) { + return -1; + } + break; + + case CURLINFO_HEADER_OUT: + case CURLINFO_DATA_OUT: + php_http_buffer_append(h->request.buffer, data, length); + + if (PHP_HTTP_MESSAGE_PARSER_STATE_FAILURE == php_http_message_parser_parse(h->request.parser, h->request.buffer, flags, &h->request.message)) { return -1; } break; @@ -510,11 +517,13 @@ static STATUS set_options(php_http_client_t *h, HashTable *options) zval **cookie_val; FOREACH_KEYVAL(pos, zoption, cookie_key, cookie_val) { - if (cookie_key.type == HASH_KEY_IS_STRING) { - zval *val = php_http_ztyp(IS_STRING, *cookie_val); - php_http_buffer_appendf(&curl->options.cookies, "%s=%s; ", cookie_key.str, Z_STRVAL_P(val)); - zval_ptr_dtor(&val); - } + zval *val = php_http_ztyp(IS_STRING, *cookie_val); + + php_http_array_hashkey_stringify(&cookie_key); + php_http_buffer_appendf(&curl->options.cookies, "%s=%s; ", cookie_key.str, Z_STRVAL_P(val)); + php_http_array_hashkey_stringfree(&cookie_key); + + zval_ptr_dtor(&val); } php_http_buffer_fix(&curl->options.cookies); @@ -1073,6 +1082,7 @@ PHP_HTTP_API STATUS php_http_curl_client_prepare(php_http_client_t *h, php_http_ } /* request headers */ + php_http_message_update_headers(msg); if (zend_hash_num_elements(&msg->hdrs)) { php_http_array_hashkey_t header_key = php_http_array_hashkey_init(0); zval **header_val; @@ -1269,7 +1279,7 @@ PHP_HTTP_API php_http_client_ops_t *php_http_curl_client_get_ops(void) #define PHP_HTTP_CURL_CLIENT_ME(method, visibility) PHP_ME(HttpClientCURL, method, PHP_HTTP_ARGS(HttpClientCURL, method), visibility) #define PHP_HTTP_CURL_CLIENT_CLIENT_MALIAS(me, vis) ZEND_FENTRY(me, ZEND_MN(HttpClient_##me), PHP_HTTP_ARGS(HttpClientCURL, me), vis) -PHP_HTTP_BEGIN_ARGS(send, 1) +PHP_HTTP_BEGIN_ARGS(send, 0) PHP_HTTP_ARG_VAL(request, 0) PHP_HTTP_END_ARGS; @@ -1297,7 +1307,11 @@ zend_object_value php_http_curl_client_object_new_ex(zend_class_entry *ce, php_h o = ecalloc(1, sizeof(php_http_client_object_t)); zend_object_std_init((zend_object *) o, ce TSRMLS_CC); +#if PHP_VERSION_ID < 50339 + zend_hash_copy(((zend_object *) o)->properties, &(ce->default_properties), (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval*)); +#else object_properties_init((zend_object *) o, ce); +#endif if (!(o->client = r)) { o->client = php_http_client_init(NULL, &php_http_curl_client_ops, NULL, NULL TSRMLS_CC);