Following redirects with curl
I was testing how redirect-after-POST works with Google App Engine’s urlfetch.fetch function and got the surprising result that it follows a redirect from a POST request with…another POST request. This is not what browsers do so I tried it with
curl -L -XPOST http://example.com/some-form-handler
I was confused to see that
curl also had this behavior, since the man page says:
When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP response was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following request using the same unmodified method.
The trick is that the
-X argument tells
curl to always use the specified HTTP method. To get
curl to switch from POST to GET, you need to make
curl implicitly do a POST, for example with the
I find this counter-intuitive, but at least there is a work-around!