Python Requests 문서를 살펴 보았지만 달성하려는 기능에 대한 기능을 볼 수 없습니다.
내 스크립트에서 설정하고 있습니다. allow_redirects=True
.
페이지가 다른 것으로 리디렉션되었는지 여부, 새 URL이 무엇인지 알고 싶습니다.
예를 들어 시작 URL이 다음과 같으면 www.google.com/redirect
그리고 최종 URL은 www.google.co.uk/redirected
그 URL을 어떻게 얻습니까?
답변
response.history
속성에서 찾을 수 있습니다 최종 URL로 이끌었다 응답의 목록입니다 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
답변
이것은 약간 다른 질문에 대한 대답입니다. 그러나 제가이 문제를 직접 고수했기 때문에 다른 사람에게 유용 할 수 있기를 바랍니다.
allow_redirects=False
체인을 r.url
따르지 않고 첫 번째 리디렉션 개체 를 사용 하고 직접 가져오고 싶고 302 응답 개체에서 직접 리디렉션 위치를 가져 오려면 작동하지 않습니다. 대신 “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
답변
문서에는 https://requests.readthedocs.io/en/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