Python无法发送POST请求

时间:2018-09-22 05:08:02

标签: python api post

我正在尝试使用Python的request模块发布数据,但始终会出错。如果我使用相同的数据通过postman发布到API,则会收到201响应,这很好。这是python代码:

import requests

json_data = open(config_file)
config_data = json.load(json_data)
json_data.close()

############################
# some code to get health_data
############################
health_data = json.dumps(health_data)

try:
    log.error("Posting data to API")
    response = requests.post(config_data["API"], data=health_data)
    log.error(response.status_code, response.reason)
except Exception as e:
    log.error(e)

我已将所有配置保存在config.json文件中。 health_data是我正在使用json.dumps转换为json格式的数据。当我将此health_data发布到API时,我总是得到500。但是,如果我使用health_data将相同的postman发布到API,则会得到201响应代码,因此我认为python代码有问题。我认为此行有问题:

response = requests.post(config_data["API"], data=health_data)

我也尝试使用json代替data,因为我有json数据,如下所示:

response = requests.post(config_data["API"], json=health_data)

但是它会抛出同样的500错误。

谁能给我指出正确的方向。非常感谢。

health_data:

{
    "macs": "44ead844c9d1",
    "aTime": "2018-08-09T19:04:01Z",
    "startTime": "2018-08-09T19:04:01Z",
    "stopTime": "2018-08-29T18:19:48Z",
    "data1": ["2018-08-09T19:04:02Z : 26.62", "2018-08-09T19:19:02Z : 27.82", "2018-08-29T18:04:19Z : 18.79", "2018-08-29T18:19:48Z : 20.26"],
    "data2": ["2018-08-09T19:04:02Z : 63.83", "2018-08-09T19:19:02Z : 59.16", "2018-08-09T19:34:02Z : 58.73", "2018-08-29T18:04:19Z : 100", "2018-08-29T18:19:48Z : 85.51"]
}

2 个答案:

答案 0 :(得分:0)

您使用的命令是什么意思:

>>> help(open)
Open a file for reading in text mode and return a stream

>>> help(json.load)
Deserialize a .read()-supporting file-like object containing a JSON document to a Python object.

>>> help(json.dumps)
Serialize `obj` to a JSON formatted `str`

>>> help(requests.post)
post(url, data=None, json=None, **kwargs)
    Sends a POST request.

    :param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`.
    :param json: (optional) json data to send in the body of the :class:`Request`.

根据此信息:您可以使用open参数来json.loadrequest.postdata

答案 1 :(得分:0)

我通过不使用json消息发布数据来解决它。我已经在python中使用dict()并使用:

发布了数据
response = requests.post(config_data["API"], json=health_data)