python请求中的Http重定向代码3XX

Bis*_*ash 22 python redirect http-status-codes python-requests

我正在尝试捕获重定向URL的http状态代码3XX/302.但我无法得到它,因为它提供了200个状态代码.

这是代码:

import requests
r = requests.get('http://goo.gl/NZek5')
print r.status_code
Run Code Online (Sandbox Code Playgroud)

我想这应该发出301或302,因为它重定向到另一个页面.我曾经尝试过几次重定向网址(例如http://fb.com),但它又发布了200.应该怎样做才能正确捕获重定向代码?

Mar*_*ers 51

requests处理重定向,看重定向和历史.

allow_redirects=False如果您不想requests处理重定向,请设置,或者您可以检查r.history列表中包含的重定向响应.

演示:

>>> import requests
>>> r = requests.get('http://goo.gl/NZek5')
>>> r.history
(<Response [301]>,)
>>> r.history[0].status_code
301
>>> r.history[0].headers['Location']
'http://docs.python-requests.org/en/latest/user/quickstart/'
>>> r.url
u'http://docs.python-requests.org/en/latest/user/quickstart/'
>>> r = requests.get('http://goo.gl/NZek5', allow_redirects=False)
>>> r.status_code
301
>>> r.url
u'http://goo.gl/NZek5'
Run Code Online (Sandbox Code Playgroud)

因此,如果allow_redirectsTrue,则已遵循重定向,并且返回的最终响应是在重定向之后的最后一页.如果allow_redirectsFalse,则返回第一个响应,即使它是重定向.


Geo*_*hij 10

requests.get允许使用allow_redirects默认的可选关键字参数True.设置allow_redirectsFalse将在重定向后自动禁用,如下所示:

In [1]: import requests
In [2]: r = requests.get('http://goo.gl/NZek5', allow_redirects=False)
In [3]: print r.status_code
301
Run Code Online (Sandbox Code Playgroud)