问题:Python请求库重定向新网址
我一直在浏览Python Requests文档,但是看不到我要实现的功能。
在我的脚本中,我正在设置allow_redirects=True
。
我想知道页面是否已重定向到其他内容,新的URL是什么。
例如,如果起始URL为: www.google.com/redirect
最终的URL是 www.google.co.uk/redirected
我如何获得该URL?
回答 0
您正在寻找请求历史记录。
该response.history
属性是导致最终到达网址的响应列表,可以在中找到response.url
。
response = requests.get(someurl)
if response.history:
print("Request was redirected")
for resp in response.history:
print(resp.status_code, resp.url)
print("Final destination:")
print(response.status_code, response.url)
else:
print("Request was not redirected")
演示:
>>> import requests
>>> response = requests.get('http://httpbin.org/redirect/3')
>>> response.history
(<Response [302]>, <Response [302]>, <Response [302]>)
>>> for resp in response.history:
... print(resp.status_code, resp.url)
...
302 http://httpbin.org/redirect/3
302 http://httpbin.org/redirect/2
302 http://httpbin.org/redirect/1
>>> print(response.status_code, response.url)
200 http://httpbin.org/get
回答 1
这回答了一个稍有不同的问题,但是由于我自己一直坚持这个问题,所以我希望它对其他人可能有用。
如果要使用allow_redirects=False
并直接到达第一个重定向对象,而不是遵循它们的链,而只想直接从302响应对象中获取重定向位置,则r.url
则将无法使用。相反,它是“ Location”标头:
r = requests.get('http://github.com/', allow_redirects=False)
r.status_code # 302
r.url # http://github.com, not https.
r.headers['Location'] # https://github.com/ -- the redirect destination
回答 2
该文档具有以下内容:https: //requests.readthedocs.io/zh/master/user/quickstart/#redirection-and-history
import requests
r = requests.get('http://www.github.com')
r.url
#returns https://www.github.com instead of the http page you asked for
回答 3
我觉得requests.head代替requests.get会更安全的处理URL重定向时调用,检查GitHub的问题在这里:
r = requests.head(url, allow_redirects=True)
print(r.url)
回答 4
对于python3.5,您可以使用以下代码:
import urllib.request
res = urllib.request.urlopen(starturl)
finalurl = res.geturl()
print(finalurl)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。