2015-04-03 53 views
1

我正在尋找unhorten(解決)在python中的網址,當最終的網址是https。我看到了這個問題:How can I un-shorten a URL using python?(以及類似的其他人),但正如在接受的答案的評論中指出的那樣,這個解決方案只在urls沒有被重定向到https時纔有效。如何使用python取消縮短(解析)url,當最終url爲https時?

作爲參考,在這個問題的代碼(重定向到HTTP URL時的正常工作)是:

# This is for Py2k. For Py3k, use http.client and urllib.parse instead, and 
# use // instead of/for the division 
import httplib 
import urlparse 

def unshorten_url(url): 
    parsed = urlparse.urlparse(url) 
    h = httplib.HTTPConnection(parsed.netloc) 
    resource = parsed.path 
    if parsed.query != "": 
     resource += "?" + parsed.query 
    h.request('HEAD', resource) 
    response = h.getresponse() 
    if response.status/100 == 3 and response.getheader('Location'): 
     return unshorten_url(response.getheader('Location')) # changed to  process chains of short urls 
    else: 
     return url 

(注意 - 由於顯而易見的帶寬的原因,我期待通過只是要求文件來實現標頭的[即如僅HTTP以上版本],而不是通過詢問整個頁面的內容)

回答

9

你可以從url的方案,然後使用HTTPSConnection如果parsed.schemehttps
你也可以使用請求庫來做到這一點很簡單。

>>> import requests 
>>> r = requests.head('http://bit.ly/IFHzvO', allow_redirects=True) 
>>> print(r.url) 
https://www.google.com 
+1

感謝 - 必須在請求中添加選項「verify = False」,因爲每當在不同的https域之間重定向時都會發生ssl錯誤。 (瞭解不驗證SSL證書的危險) – kyrenia 2015-04-03 20:06:50