X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=inline;f=http_functions.c;h=4e67be7aee3fac005c0e2f083d096c94e0986b60;hb=e47ee304be6758fbbfd238476f8a6bda9090fe12;hp=ba2bd56135717d73c50e2ad40693e5179f29e5cd;hpb=4f5d70d375dac27459a80c1e5271697c1f46c675;p=m6w6%2Fext-http
diff --git a/http_functions.c b/http_functions.c
index ba2bd56..4e67be7 100644
--- a/http_functions.c
+++ b/http_functions.c
@@ -416,7 +416,7 @@ PHP_FUNCTION(ob_etaghandler)
* Use with http_send() API.
*
* Example:
- *
+ *
*
- *
+ *
*/
PHP_FUNCTION(http_throttle)
{
@@ -460,7 +460,7 @@ PHP_FUNCTION(http_redirect)
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 %s?%s.\n")];
@@ -606,26 +606,26 @@ PHP_FUNCTION(http_chunked_decode)
*/
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);
}
/* }}} */
@@ -652,6 +652,7 @@ PHP_FUNCTION(http_parse_headers)
/* {{{ proto array http_get_request_headers(void)
*
+ * Get a list of incoming HTTP headers.
*/
PHP_FUNCTION(http_get_request_headers)
{
@@ -662,6 +663,43 @@ PHP_FUNCTION(http_get_request_headers)
}
/* }}} */
+/* {{{ 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_STRING(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.
+ */
+PHP_FUNCTION(http_match_request_header)
+{
+ char *header, *value;
+ int header_len, value_len;
+ zend_bool match_case = 0, result = 0;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|b", &header, &header_len, &value, &value_len, &match_case)) {
+ RETURN_FALSE;
+ }
+
+ RETURN_BOOL(http_match_request_header_ex(header, value, match_case));
+}
+/* }}} */
+
/* {{{ HAVE_CURL */
#ifdef HTTP_HAVE_CURL
@@ -825,7 +863,6 @@ PHP_FUNCTION(http_post_data)
} else {
RETVAL_FALSE;
}
- http_request_body_dtor(&body);
}
/* }}} */
@@ -868,6 +905,9 @@ PHP_FUNCTION(http_post_fields)
/* {{{ proto string http_put_file(string url, string file[, array options[, array &info]])
*
+ * Performs an HTTP PUT request, uploading file.
+ * Returns the HTTP response as string.
+ * See http_get() for a full list of available options.
*/
PHP_FUNCTION(http_put_file)
{
@@ -912,6 +952,9 @@ PHP_FUNCTION(http_put_file)
/* {{{ proto string http_put_stream(string url, resource stream[, array options[, array &info]])
*
+ * Performs an HTTP PUT request, uploading stream.
+ * Returns the HTTP response as string.
+ * See http_get() for a full list of available options.
*/
PHP_FUNCTION(http_put_stream)
{
@@ -950,12 +993,9 @@ PHP_FUNCTION(http_put_stream)
}
/* }}} */
-/* {{{ proto bool http_request()
- */
-/* }}} */
-
/* {{{ proto long http_request_method_register(string method)
*
+ * Register a custom request method.
*/
PHP_FUNCTION(http_request_method_register)
{
@@ -976,6 +1016,7 @@ PHP_FUNCTION(http_request_method_register)
/* {{{ proto bool http_request_method_unregister(mixed method)
*
+ * Unregister a previously registered custom request method.
*/
PHP_FUNCTION(http_request_method_unregister)
{
@@ -1011,6 +1052,7 @@ PHP_FUNCTION(http_request_method_unregister)
/* {{{ proto long http_request_method_exists(mixed method)
*
+ * Check if a request method is registered (or available by default).
*/
PHP_FUNCTION(http_request_method_exists)
{
@@ -1042,6 +1084,7 @@ PHP_FUNCTION(http_request_method_exists)
/* {{{ proto string http_request_method_name(long method)
*
+ * Get the literal string representation of a standard or registered request method.
*/
PHP_FUNCTION(http_request_method_name)
{
@@ -1084,18 +1127,18 @@ PHP_FUNCTION(http_auth_basic)
realm = "Restricted";
}
- if (SUCCESS != http_auth_credentials(&suser, &spass)) {
- http_auth_header("Basic", realm);
+ if (SUCCESS != http_auth_basic_credentials(&suser, &spass)) {
+ http_auth_basic_header(realm);
RETURN_FALSE;
}
if (strcasecmp(suser, user)) {
- http_auth_header("Basic", realm);
+ http_auth_basic_header(realm);
RETURN_FALSE;
}
if (strcmp(spass, pass)) {
- http_auth_header("Basic", realm);
+ http_auth_basic_header(realm);
RETURN_FALSE;
}
@@ -1137,8 +1180,8 @@ PHP_FUNCTION(http_auth_basic_cb)
realm = "Restricted";
}
- if (SUCCESS != http_auth_credentials(&user, &pass)) {
- http_auth_header("Basic", realm);
+ if (SUCCESS != http_auth_basic_credentials(&user, &pass)) {
+ http_auth_basic_header(realm);
RETURN_FALSE;
}
{
@@ -1161,7 +1204,7 @@ PHP_FUNCTION(http_auth_basic_cb)
efree(zparams[1]);
if (!result) {
- http_auth_header("Basic", realm);
+ http_auth_basic_header(realm);
}
RETURN_BOOL(result);