#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-
#include "php.h"
+
+#include "SAPI.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "ext/session/php_session.h"
#include "ext/standard/php_string.h"
-#include "SAPI.h"
-
-#include "phpstr/phpstr.h"
-
#include "php_http.h"
#include "php_http_std_defs.h"
#include "php_http_api.h"
#include "php_http_send_api.h"
#include "php_http_url_api.h"
+#include "phpstr/phpstr.h"
+
ZEND_EXTERN_MODULE_GLOBALS(http)
/* {{{ proto string http_date([int timestamp])
size_t query_len = 0;
zend_bool session = 0, permanent = 0;
zval *params = NULL;
- char *query, *url, *URI,
+ char *query = NULL, *url = NULL, *URI,
LOC[HTTP_URI_MAXLEN + sizeof("Location: ")],
RED[HTTP_URI_MAXLEN * 2 + sizeof("Redirecting to <a href=\"%s?%s\">%s?%s</a>.\n")];
*/
PHP_FUNCTION(http_split_response)
{
- zval *zresponse, *zbody, *zheaders;
+ char *response, *body;
+ int response_len;
+ size_t body_len;
+ zval *zheaders;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zresponse) != SUCCESS) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &response, &response_len) != SUCCESS) {
RETURN_FALSE;
}
- convert_to_string(zresponse);
-
- MAKE_STD_ZVAL(zbody);
MAKE_STD_ZVAL(zheaders);
array_init(zheaders);
- if (SUCCESS != http_split_response(zresponse, zheaders, zbody)) {
+ if (SUCCESS != http_split_response(response, response_len, Z_ARRVAL_P(zheaders), &body, &body_len)) {
http_error(E_WARNING, HTTP_E_PARSE, "Could not parse HTTP response");
RETURN_FALSE;
}
array_init(return_value);
add_index_zval(return_value, 0, zheaders);
- add_index_zval(return_value, 1, zbody);
+ add_index_stringl(return_value, 1, body, body_len, 0);
}
/* }}} */
}
/* }}} */
+/* {{{ proto string http_get_request_body(void)
+ *
+ * Get the raw request body (e.g. POST or PUT data).
+ */
+PHP_FUNCTION(http_get_request_body)
+{
+ char *body;
+ size_t length;
+
+ NO_ARGS;
+
+ if (SUCCESS == http_get_request_body(&body, &length)) {
+ RETURN_STRINGL(body, (int) length, 0);
+ } else {
+ RETURN_NULL();
+ }
+}
+/* }}} */
+
/* {{{ proto bool http_match_request_header(string header, string value[, bool match_case = false])
*
* Match an incoming HTTP header.