有测试问题请微信联系作者,备注来意(点击此处添加)
240
一名普通的测试打工人;专注自动化测试技术研究、实践、总结、分享、交流。
用我8年+的经历,给大家带来更多实用的干货。
人若有志,就不会在半坡停止。

【自动化测试】requests发送HTTPS请求(处理SSL证书验证)

SSL是什么,为什么发送HTTPS请求时需要证书验证?

SSL(Secure Socket Layer,安全套接字层):位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。(是为了解决HTTP协议是明文,避免传输的数据被窃取,篡改,劫持等。)
TSL(Transport Layer Security,传输层安全协议):用于两个应用程序之间提供保密性和数据完整性。(TSL其实是SSL标准化后的产物,即SSL/TSL)
"SSL和TSL可以粗浅理解为"一个东西",它俩是并列关系
最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。
HTTPS:HTTPS是兼容HTTP的,可以把HTTPS理解为'HTTP over TSL',即HTTPS是HTTP协议和TSL协议的组合。

HTTPS请求过程

HTTPS在传输数据时,同样会先建立TCP连接,建立起TCP连接后,会建立TSL连接,这个过程可以通过抓包查看:

请求可以为HTTPS请求验证SSL证书,就像web浏览器一样,SSL验证默认是开启的,

如果证书验证失败,请求会抛出SSLError:

>>>import requests
>>>requests.get('https:xxxx.com')    #发起一个https请求
>>>requests.exceptions.SSLError: xxx

证书处理

证书处理(SSL Cert Verification)
很多网站都是https,但是不用证书也可以访问,大多数情况都是可以携带也可以不携带证书如知乎\百度 等都是可带可不带,但有硬性要求的,则必须带,比如对于定向的用户,拿到证书后才有权限访问某个特定网站。
官方文档解释如下:

关闭证书

代码示例:

# 1,关闭证书
res = requests.get(url="https://www.12306.cn",verify=False)  #不验证证书,报警告,返回200
print(res.content.decode("utf-8"))

关闭警告(忽略警告信息InsecureRequestWarning)

import requests,warnings
from requests.packages import urllib3
# 关闭警告
urllib3.disable_warnings()
warnings.filterwarnings("ignore")

安装pyopenssl模块,可以验证证书(可以在请求中不用 verify=False)

代码示例:

# 安装pyopenssl模块,可以验证证书(可以在请求中不用 verify=False)
res = requests.get(url="https://www.12306.cn")
print(res.content.decode("utf-8"))

加上证书(找公司开发人员要 .crt文件 推荐)

代码示例:

# 3,加上证书,找公司开发人员要 .crt文件   推荐
res = requests.get(url="https://www.12306.cn",cert=("/路径/证书.crt","/路径/key"))
posted @ 2022-09-20 21:06  三叔测试笔记  阅读(2204)  评论(0编辑  收藏  举报
返回顶部 跳转底部