Python调用公用事业API时如何携带公钥证书及修复EOF语法错误
语法错误修复
触发unexpected EOF while parsing的直接原因是requests.post调用语句末尾缺少闭合的右括号,同时存在参数传递逻辑错误:你把请求头字典错误传入了cert参数的元组中,不符合requests的参数要求。
双向SSL认证(携带公钥证书)的正确写法
requests库携带客户端公钥证书做双向认证的规则如下:
cert参数接收二元组,第一个值是你的公钥证书文件(.crt/.pem格式)路径,第二个值是对应的私钥文件(.key格式)路径- 你定义的
data是请求头配置,需要传给headers参数 - 如果你需要用指定CA bundle校验服务端证书,将
verify参数设置为你的CA bundle路径即可
修正后可运行的代码
import requests, json # 服务端证书校验用的CA bundle路径 verify='/users/myprofile/Downloads/.me/ca_bundle.crt' # 请求头配置 headers = {"Authorization": "Basic ODE2YzMzM2ZmYzUwNDg1MThlNTJmMWMyMWJiYzZhOTQ6NWExNDFhMGExNGI4NGQ2OWIyMjUxYTI2OGYwZDJlYjk="} url = "https://api.pge.com/datacustodian/test/oauth/v2/token?grant_type=client_credentials" # 客户端证书配置:替换第一个路径为你的公钥证书文件路径,第二个为私钥路径 client_cert = ("/users/David/Downloads/bei.me/client_public.crt", "/users/David/Downloads/bei.me/private.key") response = requests.post(url, headers=headers, cert=client_cert, verify=verify) print("status code", response.status_code)
注意:把上述代码里的
/users/David/Downloads/bei.me/client_public.crt替换为你自己的公钥证书实际存储路径即可。
内容的提问来源于stack exchange,提问作者user10659686
相关产品推荐
相关产品推荐

