Python requests获取状态码可以通过status_code获取,例如:
r = requests.get('https://httpbin.org/get')
print(r.status_code) # 打印状态码
但是:requests默认不会获取301/302状态码。使用上述代码如果请求了一个被301/302跳转的URL,也会返回跳转后的状态码,如果是正常请求就是返回200,我们如果需要获取请求的301/302状态码,可以设置allow_redirects=False参数来获取所有的状态码。
我相信还有其他小伙伴会和我一样,在请求一个301或者302状态码的网页的时候,发现返回的确实200状态码,现在我们就知道可以通过加allow_redirects=False参数来解决啦,下面一起看下示例代码吧:
示例代码:
# GitHub 会将所有 HTTP 请求重定向到 HTTPS
r = requests.get('http://github.com/')
print(r.url) # 'https://github.com/'
print(r.status_code) # 200
获取301/302状态码
# 使用allow_redirects=False参数:
r = requests.get('http://github.com/', allow_redirects=False)
print(r.status_code) # 301
除了使用allow_redirects=False,我们还可以使用 Response 对象的history属性来跟踪重定向。
r = requests.get('http://github.com/')
print(r.status_code) # 200
print(r.history) # [<Response [301]>]
Python requests中:GET、OPTIONS、POST、PUT、PATCH 或 DELETE请求是默认是不会返回301、302状态码,HEAD请求则会直接返回重定向的状态码。
不过,在HEAD请求的时候,也可以通过设置参数allow_redirects=True,来启用重定向:
r = requests.head('http://github.com/', allow_redirects=True)
print(r.url) # 'https://github.com/'
print(r.history) # [<Response [301]>]
文档地址:
快速入门:https://requests.readthedocs.io/en/latest/user/quickstart/
Response Status Codes章节:https://requests.readthedocs.io/en/latest/user/quickstart/#response-status-codes
Redirection and History章节:https://requests.readthedocs.io/en/latest/user/quickstart/#redirection-and-history
相关文章
关于Python requests或者是Python爬虫的相关内容推荐: