1. 程式人生 > >[Python]_[網路]_[關於如何使用urllib3庫和訪問https的問題]

[Python]_[網路]_[關於如何使用urllib3庫和訪問https的問題]

場景

1.在使用Python2 urllib2訪問如今的大部分https網路時, 會輸出不支援https的警告, 這部分https使用的是TLS協議, 而Python2已經不再維護, 官方已經不支援. 如果需要支援,會提醒需要使用urllib3, 而urllib3只支援Python3.

說明

1.在使用urllib3時, 會輸出以下的警告; urllib3預設是不驗證https請求的, 這樣會容易被攻擊(網路欺騙). 所以安全方面最好還是解決這個警告, 使用安全證書.

InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)

2.要使用安全證書, 需要安裝以下包:

# pyOpenSSL, cryptography, idna, and certifi

pip install pyOpenSSL
...

3.如果pycharm裡找不到urllib3 certifi的話, 需要配置直譯器使用標準目錄下的.

4.urllib3api已經和urllib2不同了, Python3預設是小寫類名和方法.

例子

1.對於requeset返回的response.data, 是位元組資料.

import urllib3
import urllib3.contrib.pyopenssl
import
certifi def test_urllib3(url): header = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36" } http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs=certifi.where()) response = http.request('GET',
url, None, header) data = response.data.decode('utf-8') # 注意, 返回的是位元組資料.需要轉碼. print (data) # 列印網頁的內容 if __name__ == "__main__": urllib3.contrib.pyopenssl.inject_into_urllib3() url = "https://blog.csdn.net/infoworld" test_urllib3(url)

參考

Certificate verification