gpt4 book ai didi

Python 请求和 SSLContext

转载 作者:行者123 更新时间:2023-12-04 22:41:45 31 4
gpt4 key购买 nike

我试图弄清楚如何使用 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 与请求一起使用。

    最佳答案

    ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH,cafile='myCA.crt.pem')
    ctx.load_cert_chain(certfile='myprivate.pem')
    load_cert_chain加载证书和私钥以用作客户端证书 - 这将是 certrequests 的论点. cafile描述了它应该用来验证服务器证书的 CA - 这将是 verify请求的论据。结合起来,这将导致:
    requests.post(..., cert='myprivate.pem', verify='myCA.crt.pem')

    关于Python 请求和 SSLContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71021586/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com