做過接口測試的都會發現,現在的接口都是HTTPS協議了,今天就寫一篇如何通過request發送https請求,如果不是很了解HTTP協議的同學可以看下我的另外一篇博客什么是HTTP
什么是HTTPS
HTTPS 的全稱是Hyper Text Transfer Protocol over Secure Socket Layer ,是以安全為目標的HTTP通道,簡單的講是HTTP的安全版本,即HTTP下加入SSL層,簡稱HTTPS
其中HTTPS的安全基礎為SSL,因此通過它的傳輸的內容都是經過SSL加密的,它的主要作用可以分為兩種:
1、建立一個信息安全通道來保證數據傳輸的安全
2、確保網站的真實性,凡是使用了HTTPS 的網站,都可以通過點擊瀏覽器地址欄的鎖頭標志來查看網站認證之后的真實信息。
requests發送HTTPS
1.requests發送請求
2.攜帶請求頭發送https
# coding:utf-8 import requests # 請求地址 url = "https://www.qlchat.com" headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chro' 'me/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400' } r = requests.get(url,headers=headers) print(r.status_code) 代碼結果: 錯誤提示:requests.exceptions.SSLError: HTTPSConnectionPool(host='www.qlchat.com', port=443)
發現請求后代碼出現了報錯,發現是SSL的問題。
SSL證書驗證
requests中是有SSL證書認證的,SSL像默認瀏覽器一樣,SSL 驗證默認是開啟的,如果證書驗證失敗,Requests 會拋出 SSLError,如果證書驗證失敗的時候加上verify=False
源碼:
def request(method, url, **kwargs): """Constructs and sends a :class:`Request <Request>`. :type allow_redirects: bool :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use. Defaults to ``True``. 代碼太多了,刪除了一些
回到上面的代碼,加入verify=False再次請求,會發現請求成功,但是會報一行安全錯誤,
# coding:utf-8 import requests # 請求地址 url = "https://www.qlchat.com" headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chro' 'me/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400' } r = requests.get(url,headers=headers,verify=False) print(r.status_code)
解決上圖報錯。導入urllib3模塊,引入urllib3.disable_warnings()方法
再次請求就會發現報錯沒有了
感覺對你有幫助,或者喜歡的小伙伴們,點個關注,持續更新,讓我們在測試的道路上更加精彩