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