From: Michael Wallner Date: Tue, 29 Nov 2005 22:03:22 +0000 (+0000) Subject: - implement feature request: 'bodyonly' request option; X-Git-Tag: RELEASE_0_20_0~60 X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=commitdiff_plain;h=376bdc3230e8f6d2b8f167d4534e1dc8d0e0fc68 - implement feature request: 'bodyonly' request option; http_get(URL, array('bodyonly'=>1)) etc return only the response message body --- diff --git a/http_functions.c b/http_functions.c index c094e64..90350e2 100644 --- a/http_functions.c +++ b/http_functions.c @@ -974,6 +974,24 @@ PHP_FUNCTION(http_match_request_header) /* {{{ HAVE_CURL */ #ifdef HTTP_HAVE_CURL +#define RETURN_RESPONSE_OR_BODY(response) \ + { \ + 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)); \ + \ + if (msg) { \ + RETVAL_STRINGL(PHPSTR_VAL(&msg->body), PHPSTR_LEN(&msg->body), 1); \ + http_message_free(&msg); \ + return; \ + } \ + } else { \ + RETURN_PHPSTR_VAL(&response); \ + } \ + } + /* {{{ proto string http_get(string url[, array options[, array &info]]) * * Performs an HTTP GET request on the supplied url. @@ -1063,11 +1081,10 @@ PHP_FUNCTION(http_get) 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_PHPSTR_VAL(&response); - } else { - phpstr_dtor(&response); - RETURN_FALSE; + RETURN_RESPONSE_OR_BODY(response); } + phpstr_dtor(&response); + RETURN_FALSE; } /* }}} */ @@ -1097,11 +1114,10 @@ PHP_FUNCTION(http_head) 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_PHPSTR_VAL(&response); - } else { - phpstr_dtor(&response); - RETURN_FALSE; + RETURN_RESPONSE_OR_BODY(response); } + phpstr_dtor(&response); + RETURN_FALSE; } /* }}} */ @@ -1137,11 +1153,10 @@ PHP_FUNCTION(http_post_data) 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)) { - RETVAL_PHPSTR_VAL(&response); - } else { - phpstr_dtor(&response); - RETVAL_FALSE; + RETURN_RESPONSE_OR_BODY(response); } + phpstr_dtor(&response); + RETVAL_FALSE; } /* }}} */ @@ -1177,12 +1192,12 @@ PHP_FUNCTION(http_post_fields) 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)) { - RETVAL_PHPSTR_VAL(&response); - } else { - phpstr_dtor(&response); - RETVAL_FALSE; + http_request_body_dtor(&body); + RETURN_RESPONSE_OR_BODY(response); } http_request_body_dtor(&body); + phpstr_dtor(&response); + RETURN_FALSE; } /* }}} */ @@ -1228,12 +1243,12 @@ PHP_FUNCTION(http_put_file) 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)) { - RETVAL_PHPSTR_VAL(&response); - } else { - phpstr_dtor(&response); - RETVAL_FALSE; + http_request_body_dtor(&body); + RETURN_RESPONSE_OR_BODY(response); } http_request_body_dtor(&body); + phpstr_dtor(&response); + RETURN_FALSE; } /* }}} */ @@ -1277,11 +1292,10 @@ PHP_FUNCTION(http_put_stream) 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_PHPSTR_VAL(&response); - } else { - phpstr_dtor(&response); - RETURN_NULL(); + RETURN_RESPONSE_OR_BODY(response); } + phpstr_dtor(&response); + RETURN_FALSE; } /* }}} */ #endif /* HTTP_HAVE_CURL */ diff --git a/package2.xml b/package2.xml index 358d5f3..93e0a1a 100644 --- a/package2.xml +++ b/package2.xml @@ -33,8 +33,8 @@ HttpUtil, HttpMessage, HttpRequest, HttpRequestPool; HttpResponse (PHP-5.1) 2005-00-00 - 0.19.0 - 0.19.0 + 0.20.0 + 0.20.0 beta @@ -42,16 +42,7 @@ HttpUtil, HttpMessage, HttpRequest, HttpRequestPool; HttpResponse (PHP-5.1) BSD, revised diff --git a/php_http.h b/php_http.h index 1801943..8e724af 100644 --- a/php_http.h +++ b/php_http.h @@ -15,7 +15,7 @@ #ifndef PHP_EXT_HTTP_H #define PHP_EXT_HTTP_H -#define PHP_EXT_HTTP_VERSION "0.19.0" +#define PHP_EXT_HTTP_VERSION "0.20.0dev" #include "php.h" #include "php_http_std_defs.h"