#49571 [Tbd->Csd]: CURLOPT_POSTREDIR not implemented
| From: | info at pcxtra dot nl | Date: | Fri, 25 Sep 2009 12:07:13 +0000 |
| Subject: | #49571 [Tbd->Csd]: CURLOPT_POSTREDIR not implemented | ||
| References: | 1 | Groups: | php.bugs php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-2820@lists.php.net to get a copy of this message | ||
ID: 49571
User updated by: info at pcxtra dot nl
Reported By: info at pcxtra dot nl
-Status: To be documented
+Status: Closed
Bug Type: Feature/Change Request
Operating System: Windows XP
PHP Version: 5.3.0
Assigned To: srinatar
New Comment:
Thanks a lot for your help!
I can confirm that my case was indeed solved by commenting the
CUSTOMREQUEST option:
/*
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, "POST");
*/
This seems even logical when I reconsider my code as it's a custom
method and kept untouched on a redirect.
Also good to see that the POSTREDIR option is implemented, at this
moment I only needed the default curl behaviour and didn't test this
POSTREDIR option.
Previous Comments:
------------------------------------------------------------------------
[2009-09-24 18:45:09] svn@php.net
Automatic comment from SVN on behalf of srinatar
Revision: http://svn.php.net/viewvc/?view=revision&revision=288678
Log: - Rollback fix for bug #49571 (CURLOPT_POSTREDIR not implemented).
# - Features don't go into PHP 5.2
------------------------------------------------------------------------
[2009-09-24 18:29:20] srinatar@php.net
docs comments already provided.
------------------------------------------------------------------------
[2009-09-24 18:28:30] srinatar@php.net
following needs to be documented
Whenever there is a redirect request (either 301 or 302) , curl
(against HTTP/1.1 spec) always follows with a GET request. However, if
your applications wants compliance with HTTP/1.1 spec, and be able to
issue a POST request after a POST redirect, user can use
curl_setopt( <curl-handle>, CURLOPT_POSTREDIR, 3);
here 3 tells curl module to redirect both 301 as well as 302 requests.
0,1,2,3 are the valid options for the last argument.
0 -> do not set any behavior
1 -> follow redirect with the same type of request only for 301
redirects.
2 -> follow redirect with the same type of request only for 302
redirects.
3 -> follow redirect with the same type of request both for 301 and 302
redirects.
for example, if users wants the ability to redirect only for 301
requests, then they could use
curl_setopt( <curl-handle>, CURLOPT_POSTREDIR, 1);
------------------------------------------------------------------------
[2009-09-24 18:20:50] svn@php.net
Automatic comment from SVN on behalf of srinatar
Revision: http://svn.php.net/viewvc/?view=revision&revision=288677
Log: - Fixed bug #49571 (CURLOPT_POSTREDIR not implemented).
------------------------------------------------------------------------
[2009-09-23 23:31:05] srinatar@php.net
hi
hmm.. when i commented this below line in your example
/*
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, "POST");
*/
i was able to get curl to send a 'GET' request after post returning a
redirect.
127.0.0.1 - - [23/Sep/2009:16:25:51 -0700] "POST /curl.php?redir=true
HTTP/1.1" 302 50
127.0.0.1 - - [23/Sep/2009:16:25:51 -0700] "GET /curl.php?start=true
HTTP/1.1" 200 1323
127.0.0.1 - - [23/Sep/2009:16:25:51 -0700] "GET /curl.php?target=true
HTTP/1.1" 200 4
similarly, when i changed the redirect to 302, i was also able to get
curl to issue a 'get' request after a redirect.
127.0.0.1 - - [23/Sep/2009:16:25:13 -0700] "POST /curl.php?redir=true
HTTP/1.1" 301 50
127.0.0.1 - - [23/Sep/2009:16:25:13 -0700] "GET /curl.php?target=true
HTTP/1.1" 200 4
127.0.0.1 - - [23/Sep/2009:16:25:13 -0700] "GET /curl.php?start=true
HTTP/1.1" 200 1333
now, here is a simple patch against 5.3, which allows you to do
curl_setopt( $ch, CURLOPT_POSTREDIR, 3 ) and which forces curl to issue
POST (or same request) after seeing a redirect.
Index: ext/curl/interface.c
===================================================================
--- ext/curl/interface.c (revision 288624)
+++ ext/curl/interface.c (working copy)
@@ -747,8 +747,10 @@
REGISTER_CURL_CONSTANT(CURLFTPSSL_CONTROL);
REGISTER_CURL_CONSTANT(CURLFTPSSL_ALL);
#endif
+
#if LIBCURL_VERSION_NUM > 0x071301
REGISTER_CURL_CONSTANT(CURLOPT_CERTINFO);
+ REGISTER_CURL_CONSTANT(CURLOPT_POSTREDIR);
#endif
/* SSH support works in 7.19.0+ using libssh2 */
@@ -1669,6 +1671,12 @@
}
error = curl_easy_setopt(ch->cp, option,
Z_LVAL_PP(zvalue));
break;
+#if LIBCURL_VERSION_NUM > 0x071301
+ case CURLOPT_POSTREDIR:
+ convert_to_long_ex(zvalue);
+ error = curl_easy_setopt(ch->cp,
CURLOPT_POSTREDIR, Z_LVAL_PP(zvalue) & CURL_REDIR_POST_ALL);
+ break;
+#endif
case CURLOPT_PRIVATE:
case CURLOPT_URL:
case CURLOPT_PROXY:
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/49571
--
Edit this bug report at http://bugs.php.net/?id=49571&edit=1