iliaa Thu Jul 14 10:59:19 2005 EDT Modified files: /php-src/ext/standard http_fopen_wrapper.c Log: Properly recognize redirect code 303. When encountering redirect on POST request follow browsers and cURL and perform GET on the specified location field. http://cvs.php.net/diff.php/php-src/ext/standard/http_fopen_wrapper.c?r1=1.97&r2=1.98&ty=u Index: php-src/ext/standard/http_fopen_wrapper.c diff -u php-src/ext/standard/http_fopen_wrapper.c:1.97 php-src/ext/standard/http_fopen_wrapper.c:1.98 --- php-src/ext/standard/http_fopen_wrapper.c:1.97 Mon Jun 6 08:39:57 2005 +++ php-src/ext/standard/http_fopen_wrapper.c Thu Jul 14 10:59:16 2005 @@ -19,7 +19,7 @@ | Sara Golemon <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: http_fopen_wrapper.c,v 1.97 2005/06/06 12:39:57 derick Exp $ */ +/* $Id: http_fopen_wrapper.c,v 1.98 2005/07/14 14:59:16 iliaa Exp $ */ #include "php.h" #include "php_globals.h" @@ -190,7 +190,7 @@ redirect_max = Z_LVAL_PP(tmpzval); } - if (context && + if (header_init && context && php_stream_context_get_option(context, "http", "method", &tmpzval) == SUCCESS) { if (Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval) > 0) { scratch_len = strlen(path) + 29 + Z_STRLEN_PP(tmpzval); @@ -267,6 +267,35 @@ php_trim will estrndup() */ tmp = php_trim(Z_STRVAL_PP(tmpzval), Z_STRLEN_PP(tmpzval), NULL, 0, NULL, 3 TSRMLS_CC); if (strlen(tmp) > 0) { + if (!header_init) { /* Remove post headers for redirects */ + int l = strlen(tmp); + char *s, *s2, *tmp_c = estrdup(tmp); + + php_strtolower(tmp_c, l); + if ((s = strstr(tmp_c, "content-length:"))) { + if ((s2 = memchr(s, '\n', tmp_c + l - s))) { + int b = tmp_c + l - 1 - s2; + memmove(tmp, tmp + (s2 + 1 - tmp_c), b); + memmove(tmp_c, s2 + 1, b); + + } else { + tmp[s - tmp_c] = *s = '\0'; + } + l = strlen(tmp_c); + } + if ((s = strstr(tmp_c, "content-type:"))) { + if ((s2 = memchr(s, '\n', tmp_c + l - s))) { + memmove(tmp, tmp + (s2 + 1 - tmp_c), tmp_c + l - 1 - s2); + } else { + tmp[s - tmp_c] = '\0'; + } + } + efree(tmp_c); + tmp_c = php_trim(tmp, strlen(tmp), NULL, 0, NULL, 3 TSRMLS_CC); + efree(tmp); + tmp = tmp_c; + } + /* Output trimmed headers with \r\n at the end */ php_stream_write(stream, tmp, strlen(tmp)); php_stream_write(stream, "\r\n", sizeof("\r\n") - 1); @@ -367,7 +396,7 @@ } /* Request content, such as for POST requests */ - if (context && + if (header_init && context && php_stream_context_get_option(context, "http", "content", &tmpzval) == SUCCESS && Z_STRLEN_PP(tmpzval) > 0) { if (!(have_header & HTTP_HEADER_CONTENT_LENGTH)) { @@ -423,6 +452,7 @@ switch(response_code) { case 200: case 302: + case 303: case 301: reqok = 1; break;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php