请求POST麻烦

时间:2018-11-02 19:52:51

标签: python python-3.x python-requests python-3.6

我创建了以下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)'),))

我不确定这是怎么回事。我的请求的结构有问题吗?

1 个答案:

答案 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地址。