[英]Find the redirected URL with python requests library or otherwise
這個網址:
重定向至: http : //www.callmyname.sg/view/Multiple+Choices/Uk9JRC9TRzA0SkstQkJDNkRFNTEuMTNCNS9FRDY5LUE4NzgtRUY=
使用requests
,我得到:
import requests
url = "http://www.yellowpages.com.sg/newiyp/UrlRedirect?applicationInd=yp&searchType=68&searchCriteria=multiple+choices&accessType=8&advertiserName=Multiple+Choices&url=62CE8F02A1BE04A51C81F85D1CE8B54DFC608A9CDA925C15EED5DA6DD90E3F7DC99CFF77216D1D1083877BA841EB97C3"
response = requests.get(url)
response.url
它返回相同的第一個 URL,而不是重定向的 URL。
這里是示例。 我使用 bit.ly 是因為我使用你的 url 得到了 403。
>>> url = "http://bit.ly/18SuUzJ"
>>> r = requests.get(url, allow_redirects=False)
>>> r.status_code
301
>>> r.headers['Location']
'http://stackoverflow.com/'
根據請求文檔, r.history
是您所需要的。
該站點似乎需要會話 cookie 才能使重定向工作。
r.url
實際上會在重定向后顯示 URL( 除非您更改了配置)。
您重定向的問題在於,如果 cookie 不存在,則它永遠不會發生。 您可以通過在隱身/私密模式下使用瀏覽器訪問 URL 來測試。 您將看到來自http://www.yellowpages.com.sg/的錯誤消息,狀態代碼為 200。重新加載時,您將被重定向。
奇怪的是,即使使用requests
會話,我也無法獲得重定向。 使用真實瀏覽器的用戶代理字符串似乎也無濟於事。 您可能需要詳細比較這兩個請求才能找到關鍵的區別。
我試過的代碼是這樣的:
import requests
headers = {'User-Agent': 'user_agent',}
s = requests.Session()
url = "http://www.yellowpages.com.sg/"
r = s.get(url, headers=headers)
url = "http://www.yellowpages.com.sg/newiyp/UrlRedirect?applicationInd=yp&searchType=68&searchCriteria=multiple+choices&accessType=8&advertiserName=Multiple+Choices&url=62CE8F02A1BE04A51C81F85D1CE8B54DFC608A9CDA925C15EED5DA6DD90E3F7DC99CFF77216D1D1083877BA841EB97C3"
r = s.get(url, headers=headers)
r.url
HEAD
請求可能比GET
請求更快。 即使不遵循GET
重定向也是如此。 這是因為HEAD
只返回標題,而不是內容,而GET
返回兩者。
import requests
>>> response = requests.head('https://bit' + '.ly/pyre', allow_redirects=False)
>>> response.is_redirect
True
>>> response.headers['Location']
'http://www.python.org/doc/current/library/re.html'
上述方法應准確識別一級重定向。 同樣為了簡單起見,我使用requests.head
而不是requests.Session().head
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.