web-dev-qa-db-ja.com

Python要求ライブラリの新しいURLのリダイレクト

私はPython Requestsドキュメントを調べてきましたが、私が達成しようとしているものの機能を見ることができません。

私のスクリプトでは、allow_redirects=Trueを設定しています。

ページが別のURLにリダイレクトされたかどうかを知りたいのですが。

たとえば、開始URLがwww.google.com/redirectの場合

最終的なURLはwww.google.co.uk/redirectedです

そのURLを取得するにはどうすればよいですか?

74
Daniel Pilch

要求履歴 を探しています。

response.history属性は、response.urlにある最終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
121
Martijn Pieters

これは少し異なる質問に答えていますが、自分でこれにこだわったので、他の人に役立つかもしれません。

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
44
hwjp

ドキュメントにはこの宣伝文があります http://docs.python-requests.org/en/latest/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 
24
Back2Basics

requests.headではなくrequests.getの方がより安全だと思いますURLリダイレクトを処理するときに呼び出すには、githubの問題を確認してください here

r = requests.head(url, allow_redirects=True)
print(r.url)
23
Geng Jiawen

Python3.5では、次のコードを使用できます。

import urllib.request
res = urllib.request.urlopen(starturl)
finalurl = res.geturl()
print(finalurl)
7
Shuai.Z