Python求和编程:Python请求和 SSLContext

我试图找出如何指定一个 SSLContext 请求。

我有两个功能,理论上应该做同样的,但是一个请求不工作。

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 错误。例如,在我的最后一个例子中,错误 msg 是:

requests.exceptions.ConnectionError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1131)

我只是想使用一个 SSLContext 请求。

0
ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH,cafile='myCA.crt.pem')
ctx.load_cert_chain(certfile='myprivate.pem')

load_cert_chain加载证书和私钥以用作客户端证书-这将是cert参数与requestscafile描述了它应用于验证服务器证书的 CA-这将是请求的verify参数。这将导致:

requests.post(..., cert='myprivate.pem', verify='myCA.crt.pem')
0

我找到我的 cacert.pem:/ home / & lt;soome_path & gt;/ pyEnv / myEnv / lib / python3.8 / site-packages / certifi / cacert.pem

我连接了文件:myCA.crt.pem & gt;& gt;cacert.pem myprivate.pem & gt;& gt;cacert.pem

然后我使用 verify:requests.post (...,verify = '/ home / & lt;soome_path & gt;/ pyEnv / myEnv / lib / python3.8 / site-packages / certifi / cacert.pem') 指定路径

和我没有 ssl 错误了。但是我检索一个 html msg 而不是 json。也许是我发送到端点的参数的问题。

0

我解决它使用:requests.post(URL,headers = hdr,json = {“filterList”:[{}]},cert = 'myprivate.pem')

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(889)
结婚登记程序分为哪三个步骤:单个表情符号分为三个符号(keyboard emoji list)
上一篇
Vmware安装程序无法继续:安装 vmware工具
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(14条)