Python не может отправить запрос POST - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь опубликовать данные, используя python, используя модуль request, но всегда получаю сообщение об ошибке.Если я использую те же данные для публикации в API, используя postman, я получаю ответ 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, используя json.dumps.Когда я отправляю это health_data в API, я всегда получаю 500. Но если я отправляю тот же health_data в API, используя postman, я получаю код ответа 201, поэтому я думаю, что что-то не так с питономкод.Я думаю, что-то не так с этой строкой:

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 голосов
/ 22 сентября 2018

Я решил это, не используя сообщение json для публикации данных.Я использовал dict () в Python и опубликовал данные, используя:

response = requests.post(config_data["API"], json=health_data)
0 голосов
/ 22 сентября 2018

Что означают команды, которые вы используете:

>>> 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.load и request.post с параметром data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...