我创建了以下Python脚本:
import requests
url = 'https://123.456.789.876:4567/config'
payload = { 'key' : '[{"aKey":"ggsdgfgdfsgsdgfdsgsgsdfgdfgf","id":"fsdfdsfdsfsdffdsfdsfsdfdfsdsfsfdsfdssf","failedOps":[],"tType":"valid","type":"mam"}]' }
headers = { 'Content-Type': 'application/json' }
res = requests.post(url, data=payload, headers=headers, verify=False)
print(res.json)
当我运行它时,会收到以下响应:
<bound method Response.json of <Response [400]>>
如果将print(res.json)
更改为print(res.text)
,则会得到:
MOCK: Could not generate configuration list from request body
如果我删除`verify = False,则会出现此错误:
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='123.456.789.876', port=4567): Max retries exceeded with url: /config (Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:726)'),))
我不确定这是怎么回事。我的请求的结构有问题吗?
答案 0 :(得分:1)
<bound method Response.json of <Response [400]>>
您的响应对象具有json
方法,而不是属性。参见the docs。您需要调用它,如下所示:
print(res.json())
MOCK: Could not generate configuration list from request body
这可能是HTTP响应的实际内容(这意味着,如果您尝试调用.json()
方法,它将失败,因为它不是JSON响应)。
raise SSLError(e, request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='123.456.789.876', port=4567): Max retries exceeded with url: /config (Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:726)'),))
这是预料之中的:您正在连接到正在提供证书的主机,该证书的requests
模块无法识别签名授权。那里有各种文档描述了如何向系统添加新的证书颁发机构。该过程因操作系统和发行版本而异。
如果要验证SSL证书,通常必须使用主机名而不是IP地址。