python发送http请求时遇到:error 54, 'Connection reset by peer' 解决方法
背景
公司将所有内网环境均从http访问更换为https访问,需要下发自制的ca【Certificate Authority】到所有访问内网环境的机器上以便登陆内网环境。
当遇到需要向服务端发送http请求,获取一些数据的时候报错’Connection reset by peer’。代码如下:
f_path = '/tmp/ca.cert.pem'
def add_ca():
# 导入ca证书
f = open(f_path, 'w+')
ca = "-----BEGIN CERTIFICATE-----xxxxx-----END CERTIFICATE-----"
f.writelines(ca)
url = 'https://jira.xx.local/rest/api/2/search'
res = requests.post(url, json=text, headers={"Authorization": "xxxx"}, verify=f_path)
原因
OpenSSL 这个库太老了。不兼容你要请求的网址。
重点
如果系统同时安装了多个版本的python,请查看你的代码采用的是python是哪个版本再采取解决方法。
解决方法
- 最好的办法:直接升级python到2.7.x及以上,会解决此问题。
- 如果不想升级python的话,可以用:
pip install requests[security]
- 另一种已过时的方法:
pip install pyopenssl ndg-httpsclient pyasn1
采取证书内嵌代码可节省每台机器都手动安装ca的烦恼
def add_ca():
# 导入ca证书
f = open(f_path, 'w+')
ca = "-----BEGIN CERTIFICATE----------END CERTIFICATE-----"
f.writelines(ca)
并在发送http请求时强制指定此ca证书:
res = requests.post(url, json=text, headers={"Authorization": "xxxxx"},verify=f_path)
#f_path是ca证书的路径
来源:CSDN
作者:weixin_43629355
链接:https://blog.csdn.net/weixin_43629355/article/details/84140304