X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_body_api.c;h=401e0ac453500c15d9b5a34d616224c2632263c9;hp=75b3c45bb4746d819ca9df925b1d35be3b381746;hb=43923eca4429ed3ce5fb85407345d7030a1879f1;hpb=3706c9ddb362d54d409506010952a0129e78e5e9 diff --git a/http_request_body_api.c b/http_request_body_api.c index 75b3c45..401e0ac 100644 --- a/http_request_body_api.c +++ b/http_request_body_api.c @@ -25,8 +25,6 @@ #include "php_http_url_api.h" #include "php_http_request_body_api.h" -ZEND_EXTERN_MODULE_GLOBALS(http); - /* {{{ http_request_body *http_request_body_new() */ PHP_HTTP_API http_request_body *_http_request_body_init_ex(http_request_body *body, int type, void *data, size_t size, zend_bool free ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC TSRMLS_DC) { @@ -54,31 +52,33 @@ PHP_HTTP_API http_request_body *_http_request_body_fill(http_request_body *body, struct curl_httppost *http_post_data[2] = {NULL, NULL}; /* normal data */ - FOREACH_HASH_KEYVAL(pos, fields, key, idx, data) { - if (key) { - CURLcode err; - zval *orig = *data; - - convert_to_string_ex(data); - err = curl_formadd(&http_post_data[0], &http_post_data[1], - CURLFORM_COPYNAME, key, - CURLFORM_COPYCONTENTS, Z_STRVAL_PP(data), - CURLFORM_CONTENTSLENGTH, (long) Z_STRLEN_PP(data), - CURLFORM_END - ); - - if (orig != *data) { - zval_ptr_dtor(data); - } - - if (CURLE_OK != err) { - http_error_ex(HE_WARNING, HTTP_E_ENCODING, "Could not encode post fields: %s", curl_easy_strerror(err)); - curl_formfree(http_post_data[0]); - return NULL; + if (fields) { + FOREACH_HASH_KEYVAL(pos, fields, key, idx, data) { + if (key) { + CURLcode err; + zval *orig = *data; + + convert_to_string_ex(data); + err = curl_formadd(&http_post_data[0], &http_post_data[1], + CURLFORM_COPYNAME, key, + CURLFORM_COPYCONTENTS, Z_STRVAL_PP(data), + CURLFORM_CONTENTSLENGTH, (long) Z_STRLEN_PP(data), + CURLFORM_END + ); + + if (orig != *data) { + zval_ptr_dtor(data); + } + + if (CURLE_OK != err) { + http_error_ex(HE_WARNING, HTTP_E_ENCODING, "Could not encode post fields: %s", curl_easy_strerror(err)); + curl_formfree(http_post_data[0]); + return NULL; + } + + /* reset */ + key = NULL; } - - /* reset */ - key = NULL; } } @@ -131,7 +131,7 @@ PHP_HTTP_API http_request_body *_http_request_body_fill(http_request_body *body, return http_request_body_init_rel(body, HTTP_REQUEST_BODY_CURLPOST, http_post_data[0], 0, 1); - } else { + } else if (fields) { char *encoded; size_t encoded_len; @@ -141,6 +141,8 @@ PHP_HTTP_API http_request_body *_http_request_body_fill(http_request_body *body, } return http_request_body_init_rel(body, HTTP_REQUEST_BODY_CSTRING, encoded, encoded_len, 1); + } else { + return http_request_body_init_rel(body, HTTP_REQUEST_BODY_CSTRING, estrndup("", 0), 0, 1); } }