X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_functions.c;h=279e4ea02e97777d76feb1a820944bd9b9dd0f11;hp=5cb8a16a400c5cb5d3590c6171b838ed4e56243b;hb=649aada485583ccac67928e0700cb5f1b963f4e8;hpb=f9d92cff35589f414e369228502c91f35a4e3643 diff --git a/http_functions.c b/http_functions.c index 5cb8a16..279e4ea 100644 --- a/http_functions.c +++ b/http_functions.c @@ -977,22 +977,20 @@ PHP_FUNCTION(http_match_request_header) /* {{{ HAVE_CURL */ #ifdef HTTP_HAVE_CURL -#define RETURN_RESPONSE_OR_BODY(response) \ +#define RETVAL_RESPONSE_OR_BODY(request) \ { \ zval **bodyonly; \ \ /* check if only the body should be returned */ \ if (options && (SUCCESS == zend_hash_find(Z_ARRVAL_P(options), "bodyonly", sizeof("bodyonly"), (void **) &bodyonly)) && zval_is_true(*bodyonly)) { \ - http_message *msg = http_message_parse(PHPSTR_VAL(&response), PHPSTR_LEN(&response)); \ + http_message *msg = http_message_parse(PHPSTR_VAL(&request.conv.response), PHPSTR_LEN(&request.conv.response)); \ \ if (msg) { \ RETVAL_STRINGL(PHPSTR_VAL(&msg->body), PHPSTR_LEN(&msg->body), 1); \ http_message_free(&msg); \ - phpstr_dtor(&response); \ - return; \ } \ } else { \ - RETURN_PHPSTR_VAL(&response); \ + RETVAL_STRINGL(request.conv.response.data, request.conv.response.used, 1); \ } \ } @@ -1072,7 +1070,7 @@ PHP_FUNCTION(http_get) zval *options = NULL, *info = NULL; char *URL; int URL_len; - phpstr response; + http_request request; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|a/!z", &URL, &URL_len, &options, &info) != SUCCESS) { RETURN_FALSE; @@ -1083,12 +1081,17 @@ PHP_FUNCTION(http_get) array_init(info); } - phpstr_init_ex(&response, HTTP_CURLBUF_SIZE, 0); - if (SUCCESS == http_get(URL, options ? Z_ARRVAL_P(options) : NULL, info ? Z_ARRVAL_P(info) : NULL, &response)) { - RETURN_RESPONSE_OR_BODY(response); + RETVAL_FALSE; + + http_request_init_ex(&request, NULL, HTTP_GET, URL); + if (SUCCESS == http_request_prepare(&request, options?Z_ARRVAL_P(options):NULL)) { + http_request_exec(&request); + if (info) { + http_request_info(&request, Z_ARRVAL_P(info)); + } + RETVAL_RESPONSE_OR_BODY(request); } - phpstr_dtor(&response); - RETURN_FALSE; + http_request_dtor(&request); } /* }}} */ @@ -1105,7 +1108,7 @@ PHP_FUNCTION(http_head) zval *options = NULL, *info = NULL; char *URL; int URL_len; - phpstr response; + http_request request; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|a/!z", &URL, &URL_len, &options, &info) != SUCCESS) { RETURN_FALSE; @@ -1116,12 +1119,17 @@ PHP_FUNCTION(http_head) array_init(info); } - phpstr_init_ex(&response, HTTP_CURLBUF_SIZE, 0); - if (SUCCESS == http_head(URL, options ? Z_ARRVAL_P(options) : NULL, info ? Z_ARRVAL_P(info) : NULL, &response)) { - RETURN_RESPONSE_OR_BODY(response); + RETVAL_FALSE; + + http_request_init_ex(&request, NULL, HTTP_HEAD, URL); + if (SUCCESS == http_request_prepare(&request, options?Z_ARRVAL_P(options):NULL)) { + http_request_exec(&request); + if (info) { + http_request_info(&request, Z_ARRVAL_P(info)); + } + RETVAL_RESPONSE_OR_BODY(request); } - phpstr_dtor(&response); - RETURN_FALSE; + http_request_dtor(&request); } /* }}} */ @@ -1139,8 +1147,8 @@ PHP_FUNCTION(http_post_data) zval *options = NULL, *info = NULL; char *URL, *postdata; int postdata_len, URL_len; - phpstr response; http_request_body body; + http_request request; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|a/!z", &URL, &URL_len, &postdata, &postdata_len, &options, &info) != SUCCESS) { RETURN_FALSE; @@ -1151,16 +1159,18 @@ PHP_FUNCTION(http_post_data) array_init(info); } - body.type = HTTP_REQUEST_BODY_CSTRING; - body.data = postdata; - body.size = postdata_len; + RETVAL_FALSE; - phpstr_init_ex(&response, HTTP_CURLBUF_SIZE, 0); - if (SUCCESS == http_post(URL, &body, options ? Z_ARRVAL_P(options) : NULL, info ? Z_ARRVAL_P(info) : NULL, &response)) { - RETURN_RESPONSE_OR_BODY(response); + http_request_init_ex(&request, NULL, HTTP_POST, URL); + request.body = http_request_body_init_ex(&body, HTTP_REQUEST_BODY_CSTRING, postdata, postdata_len, 0); + if (SUCCESS == http_request_prepare(&request, options?Z_ARRVAL_P(options):NULL)) { + http_request_exec(&request); + if (info) { + http_request_info(&request, Z_ARRVAL_P(info)); + } + RETVAL_RESPONSE_OR_BODY(request); } - phpstr_dtor(&response); - RETVAL_FALSE; + http_request_dtor(&request); } /* }}} */ @@ -1178,14 +1188,14 @@ PHP_FUNCTION(http_post_fields) zval *options = NULL, *info = NULL, *fields, *files = NULL; char *URL; int URL_len; - phpstr response; http_request_body body; + http_request request; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sa|aa/!z", &URL, &URL_len, &fields, &files, &options, &info) != SUCCESS) { RETURN_FALSE; } - if (SUCCESS != http_request_body_fill(&body, Z_ARRVAL_P(fields), files ? Z_ARRVAL_P(files) : NULL)) { + if (!http_request_body_fill(&body, Z_ARRVAL_P(fields), files ? Z_ARRVAL_P(files) : NULL)) { RETURN_FALSE; } @@ -1194,14 +1204,18 @@ PHP_FUNCTION(http_post_fields) array_init(info); } - phpstr_init_ex(&response, HTTP_CURLBUF_SIZE, 0); - if (SUCCESS == http_post(URL, &body, options ? Z_ARRVAL_P(options) : NULL, info ? Z_ARRVAL_P(info) : NULL, &response)) { - http_request_body_dtor(&body); - RETURN_RESPONSE_OR_BODY(response); + RETVAL_FALSE; + + http_request_init_ex(&request, NULL, HTTP_POST, URL); + request.body = &body; + if (SUCCESS == http_request_prepare(&request, options?Z_ARRVAL_P(options):NULL)) { + http_request_exec(&request); + if (info) { + http_request_info(&request, Z_ARRVAL_P(info)); + } + RETVAL_RESPONSE_OR_BODY(request); } - http_request_body_dtor(&body); - phpstr_dtor(&response); - RETURN_FALSE; + http_request_dtor(&request); } /* }}} */ @@ -1219,10 +1233,10 @@ PHP_FUNCTION(http_put_file) char *URL, *file; int URL_len, f_len; zval *options = NULL, *info = NULL; - phpstr response; php_stream *stream; php_stream_statbuf ssb; http_request_body body; + http_request request; if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|a/!z", &URL, &URL_len, &file, &f_len, &options, &info)) { RETURN_FALSE; @@ -1241,18 +1255,24 @@ PHP_FUNCTION(http_put_file) array_init(info); } + RETVAL_FALSE; + body.type = HTTP_REQUEST_BODY_UPLOADFILE; body.data = stream; body.size = ssb.sb.st_size; - phpstr_init_ex(&response, HTTP_CURLBUF_SIZE, 0); - if (SUCCESS == http_put(URL, &body, options ? Z_ARRVAL_P(options) : NULL, info ? Z_ARRVAL_P(info) : NULL, &response)) { - http_request_body_dtor(&body); - RETURN_RESPONSE_OR_BODY(response); + http_request_init_ex(&request, NULL, HTTP_PUT, URL); + request.body = &body; + if (SUCCESS == http_request_prepare(&request, options?Z_ARRVAL_P(options):NULL)) { + http_request_exec(&request); + if (info) { + http_request_info(&request, Z_ARRVAL_P(info)); + } + RETVAL_RESPONSE_OR_BODY(request); } http_request_body_dtor(&body); - phpstr_dtor(&response); - RETURN_FALSE; + request.body = NULL; + http_request_dtor(&request); } /* }}} */ @@ -1271,10 +1291,10 @@ PHP_FUNCTION(http_put_stream) zval *resource, *options = NULL, *info = NULL; char *URL; int URL_len; - phpstr response; php_stream *stream; php_stream_statbuf ssb; http_request_body body; + http_request request; if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sr|a/!z", &URL, &URL_len, &resource, &options, &info)) { RETURN_FALSE; @@ -1290,16 +1310,23 @@ PHP_FUNCTION(http_put_stream) array_init(info); } + RETVAL_FALSE; + body.type = HTTP_REQUEST_BODY_UPLOADFILE; body.data = stream; body.size = ssb.sb.st_size; - phpstr_init_ex(&response, HTTP_CURLBUF_SIZE, 0); - if (SUCCESS == http_put(URL, &body, options ? Z_ARRVAL_P(options) : NULL, info ? Z_ARRVAL_P(info) : NULL, &response)) { - RETURN_RESPONSE_OR_BODY(response); + http_request_init_ex(&request, NULL, HTTP_POST, URL); + request.body = &body; + if (SUCCESS == http_request_prepare(&request, options?Z_ARRVAL_P(options):NULL)) { + http_request_exec(&request); + if (info) { + http_request_info(&request, Z_ARRVAL_P(info)); + } + RETVAL_RESPONSE_OR_BODY(request); } - phpstr_dtor(&response); - RETURN_FALSE; + request.body = NULL; + http_request_dtor(&request); } /* }}} */ #endif /* HTTP_HAVE_CURL */