2017-07-10 50 views
1

我只是在考慮如何模仿瀏覽器(比如Chrome)如何使用Python檢測網站的協議。例如,我們在地址欄中輸入「stackoverflow.com」,然後按Enter鍵,瀏覽器可以自動檢測並將網址更改爲「https://stackoverflow.com」(添加網站協議),我想知道我們如何在Python中執行此操作,完全類似於:如何使用Python獲取網站的協議(http或https)

url = "stackoverflow.com" 
browser = Browser (url) # Browser is a class that we can get website content from url, get its protocol,... 
print browser.protocol 

HTTPS

是否有幫助做到這一點的任何庫或包?非常感謝。

編輯:我的問題是獨一無二的,因爲其他問題問如何重定向到https,如果我們輸入http,正如我所說,我們能否在第一階段自動檢測沒有僞協議?

+0

[Python中的可能的複製,檢測是一個URL必須HTTPS與HTTP](https://stackoverflow.com/questions/23764639/python-detect-is-a-url-needs-to-be-https-vs-http) –

回答

6

它適用於計算器,因爲當你第一次訪問stackoverflow.com端口80(HTTP端口),計算器的服務器通知該鏈接已被永久移動到HTTPS瀏覽器。

到同等的Python,使用requests庫,就像這樣:

>>> import requests 
>>> r = requests.get('http://stackoverflow.com') # first we try http 
>>> r.url # check the actual URL for the site 
'https://stackoverflow.com/' 

要找出網址如何變化,看看歷史對象,你會看到一個301的響應,這意味着該URI有moved permanently到一個新的地址。

>>> r.history[0] 
<Response [301]> 
>>> r.history[0].url # this is the original URL we tried 
'http://stackoverflow.com/' 
+0

這不會用於像(在這個評論的時間),imgur。com不會將http重定向到https。編輯:但是,它似乎鉻不先試用https。 –

+0

Cameron:Blurie想模仿瀏覽器,所以我覺得這個_will_會工作。 –

2

當你不輸入http://https://一個URL,瀏覽器自動假設您正在使用http://和發送端口80上

請求如果網站重定向到一個https網站,你」會得到兩個音符的標題。其中一個將會有一個響應301,表示非錯誤重定向。另一個將是101這表明您正在升級您的連接類型。

如果您打開一個新選項卡並加載http://stackexchange.com,並在您瀏覽器的開發人員工具套件的網絡選項卡上加載時觀察這些包,則可以看到這種情況。

注:

兩個代碼取決於主機支持這種行爲上。並非所有網站都會自動將您重定向到https://網站。此外,並非所有人都支持http2,所以您可能無法獲得101升級。

如果您確定要確定https://是否是首選選項,那麼您可能需要在沒有重定向時手動檢查它是否存在。

1

既然你提到的「瀏覽器」和「Chrome瀏覽器」的行爲,可以得到相同的結果@ BurkhanKhalid真的不好回答使用selenium

from selenium import webdriver 

driver = webdriver.Chrome() 
driver.get("http://stackoverflow.com") #Trying http first 
url = driver.current_url 

>>> print(url[:url.find(":")]) 
https 
相關問題