[Python]_[網路]_[關於如何使用urllib3庫和訪問https的問題]
阿新 • • 發佈:2018-12-01
場景
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.urllib3
的api
已經和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)