Saya telah melihat-lihat dokumentasi Permintaan Python tetapi saya tidak dapat melihat fungsionalitas apa pun untuk apa yang saya coba capai.
Dalam skrip saya, saya mengatur allow_redirects=True
.
Saya ingin tahu apakah halaman tersebut telah dialihkan ke hal lain, apa URL barunya.
Misalnya, jika URL awalnya adalah: www.google.com/redirect
Dan URL finalnya adalah www.google.co.uk/redirected
Bagaimana cara mendapatkan URL itu?
python
http
redirect
python-requests
Daniel Pilch
sumber
sumber
urllib2
Jawaban:
Anda mencari riwayat permintaan .
The
response.history
atribut adalah daftar tanggapan yang mengarah ke URL akhir, yang dapat ditemukan diresponse.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")
Demo:
>>> 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
sumber
Ini menjawab pertanyaan yang sedikit berbeda, tetapi karena saya terjebak dalam masalah ini sendiri, saya harap ini berguna untuk orang lain.
Jika Anda ingin menggunakan
allow_redirects=False
dan mendapatkan langsung ke objek pengalihan pertama, daripada mengikuti rangkaiannya, dan Anda hanya ingin mendapatkan lokasi pengalihan langsung dari objek respons 302, makar.url
tidak akan berfungsi. Sebaliknya, ini adalah tajuk "Lokasi":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
sumber
r.next
? Saya pikir itu akan berisiPreparedRequest
petunjuk ke URL pengalihan, tetapi tampaknya bukan itu masalahnya ...dokumentasi memiliki uraian ini 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
sumber
Saya pikir requests.head daripada requests.get akan lebih aman untuk dipanggil saat menangani pengalihan url, periksa masalah github di sini :
r = requests.head(url, allow_redirects=True) print(r.url)
sumber
Untuk python3.5, Anda dapat menggunakan kode berikut:
import urllib.request res = urllib.request.urlopen(starturl) finalurl = res.geturl() print(finalurl)
sumber