Python API 使用请求的调用抛出最大重试次数并出现 url 错误
Python API call using requests throws Max retries exceeded with url error
我正在尝试使用 Python 请求访问 https API。我获得了证书和密码来访问它。
我得到
HTTPSConnectionPool(host='abc.coom', port=443): Max retries exceeded with url: //AIMWebService//api//Accounts?AppID=xyz&Safe=123&Object=obj (Caused by SSLError(SSLError(9, '[SSL] PEM lib (_ssl.c:4024)')))
早些时候,我访问了这个 API 并通过在设置 -> 证书中添加证书以及密码在 Postman 中成功获得了结果。
import json
import requests
clientCrt = "C:\abc\abc-Certs\cert-TEST.pfx"
#clientKey = "Passphrase"
url = "https://abc.coom/AIMWebService/api/Accounts?AppID=xyz&Safe=123&Object=obj"
certServer = "C:\Users\MyName\Anaconda3\Lib\site-packages\certifi"
headers = {'content-type': 'application/json'}
#r = requests.get(url, verify=False, headers=headers, cert=(clientCrt, clientKey))
r = requests.get(url, verify=False, headers=headers, cert=clientCrt)
#r = requests.get(url, verify=certServer, headers=headers, cert=clientCrt)
#r = requests.get(url, verify=False, headers=headers)
print(r.status_code)
print(r.json())
如您所见,我尝试了多种访问方式。通过使用 verify=False,我认为我根本不需要使用密码。
有人可以帮我解决这个问题吗?
requests
需要 PEM
格式的证书,您的 .pfx
文件是 PKCS#12
格式。
您可以更改证书格式:Converting pfx to pem using openssl。
或者您可以使用此 library 为请求添加 PKCS#12 支持。
我正在尝试使用 Python 请求访问 https API。我获得了证书和密码来访问它。
我得到
HTTPSConnectionPool(host='abc.coom', port=443): Max retries exceeded with url: //AIMWebService//api//Accounts?AppID=xyz&Safe=123&Object=obj (Caused by SSLError(SSLError(9, '[SSL] PEM lib (_ssl.c:4024)')))
早些时候,我访问了这个 API 并通过在设置 -> 证书中添加证书以及密码在 Postman 中成功获得了结果。
import json
import requests
clientCrt = "C:\abc\abc-Certs\cert-TEST.pfx"
#clientKey = "Passphrase"
url = "https://abc.coom/AIMWebService/api/Accounts?AppID=xyz&Safe=123&Object=obj"
certServer = "C:\Users\MyName\Anaconda3\Lib\site-packages\certifi"
headers = {'content-type': 'application/json'}
#r = requests.get(url, verify=False, headers=headers, cert=(clientCrt, clientKey))
r = requests.get(url, verify=False, headers=headers, cert=clientCrt)
#r = requests.get(url, verify=certServer, headers=headers, cert=clientCrt)
#r = requests.get(url, verify=False, headers=headers)
print(r.status_code)
print(r.json())
如您所见,我尝试了多种访问方式。通过使用 verify=False,我认为我根本不需要使用密码。
有人可以帮我解决这个问题吗?
requests
需要 PEM
格式的证书,您的 .pfx
文件是 PKCS#12
格式。
您可以更改证书格式:Converting pfx to pem using openssl。
或者您可以使用此 library 为请求添加 PKCS#12 支持。