我试图弄清楚如何使用 Request 指定 SSLContext。
我有两个功能理论上应该做同样的事情,但是带有 Requests 的那个不起作用。
def func_OK(token):
ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH,cafile='myCA.crt.pem')
ctx.load_cert_chain(certfile='myprivate.pem')
url = 'https://my_url.com'
hdr = {"Content-Type": "application/json","Authorization":"Bearer "+token}
data = '{"filterList":[{}]}'
bdata = data.encode('utf-8')
req = urllib.request.Request(url, headers=hdr)
resp = urllib.request.urlopen(req, data=bdata, context=ctx)
content = resp.read()
data = json.loads(content.decode('utf-8'))
def func_NOK(token):
import requests
url = 'https://my_url.com'
hdr = {"Content-Type": "application/json","Authorization":"Bearer "+token}
data = '{"filterList":[{}]}'
bdata = data.encode('utf-8')
resp = requests.post(url,headers=hdr, data={"filterList":[{}]})
这两个函数之间的唯一区别是 sslContext。在 func_NOK 中,我尝试:
resp = requests.post(url,headers=hdr, data={"filterList":[{}]}, verify=False)
- 它不起作用resp = requests.post(url,headers=hdr, data={"filterList":[{}]}, cert=('myCA.crt.pem','myprivate.pem'))
- 它不起作用resp = requests.post(url,headers=hdr, data={"filterList":[{}]}, verify="concat_file.crt")
使用“concat_file.crt”文件连接“myCA.crt.pem”和“myprivate.pem”
在任何情况下,我都会遇到 SSL 错误。例如,在我的最后一个示例中,错误消息是:
requests.exceptions.ConnectionError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1131)
我只是想将 SSLContext 与请求一起使用。