According to the RFC,
If the 302 status code is received in response to a request other than
GET or HEAD, the user agent MUST NOT automatically redirect the
request unless it can be confirmed by the user, since this might
change the conditions under which the request was issued.
(http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3)
So this behaviour is at least not compliant - BUT the RFC also states that:
Note: RFC 1945 and RFC 2068 specify that the client is not allowed
to change the method on the redirected request. However, most
existing user agent implementations treat 302 as if it were a 303
response, performing a GET on the Location field-value regardless
of the original request method. The status codes 303 and 307 have
been added for servers that wish to make unambiguously clear which
kind of reaction is expected of the client.
IOW: while not RFC compliant, this is the default behaviour for most user-agents, and most web apps do indeed implement post-redirect-get with a 302 instead of a 303.
So requests
behaviour here is obviously not a bug, but a practical design decision. And as Foo Bar User already mentinned, you can alter this using the allow_redirects
arg.