Python запрос неверного сообщения - PullRequest
0 голосов
/ 06 февраля 2020

Я новичок в Python и пытаюсь отправить запрос. Я сталкиваюсь с проблемой при назначении переменной в полезной нагрузке запроса. При удалении моей переменной и простом размещении значения запрос работает нормально, но когда я пытаюсь заменить жесткое значение для моей переменной, я получаю сообщение об ошибке

{"error":{"type":"validation","message":"Invalid message"}}

Я следовал следующие статьи, но ни одна из них, похоже, не помогает моему делу

https://realpython.com/python-requests/#the -message-body

Python запросов и переменная полезная нагрузка

Вот фрагмент кода, который у меня есть. Переменная p находится в полезной нагрузке после "нумерации страниц"

import requests

p = 3
url = "someURL"

payload = "{\r\n\"filters\": {\r\n\"date_from\":\"2011-09-15\",\r\n\"date_to\":\"2019-11-20\"\r\n},\r\n\"pagination\":{\r\n\t\"page\": p,\r\n\t\"limit\":100\r\n}\r\n}"
headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Basic someAuth'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text.encode('utf8'))

Я понимаю, что полезная нагрузка не распознает мою переменную как целое число, но я не уверен, как я могу передать переменная через. Конечная цель - запустить несколько итераций запроса POST и увеличить значение переменной для каждой итерации. Мне нужно собрать данные ответов, поэтому использование Postman для этой задачи невозможно.

Спасибо

1 Ответ

0 голосов
/ 06 февраля 2020

Ваша проблема в том, что p в вашем payload является только обычным символом, а не значением из переменной p

Вы должны использовать форматирование строки

payload = '"page": {}'.format(p) 

или f-string

payload = f'"page": {p}'

, чтобы поместить значение в строку.

Кстати: вы можете поместить весь текст в ' ', если вам нужно использовать " " внутри текста


Возможно, лучше создать обычный словарь и использовать json= - он преобразует это к строке и добавить заголовок 'Content-Type': 'application/json'. И вы можете легко установить следующую страницу в следующем запросе

payload['pagination']['page'] += 1

import requests

p = 3
url = "someURL"

payload = {
    "filters": {
        "date_from": "2011-09-15",
        "date_to": "2019-11-20",
    },
    "pagination":  {
        "page": p,
        "limit": 100,
    }
}

headers = {
    'Authorization': 'Basic someAuth'
}

response = requests.post(url, headers=headers, json=payload)

print(response.content) # encoded data 
#print(response.text)

# next page

payload['pagination']['page'] += 1

response = requests.post(url, headers=headers, json=payload)

print(response.content) # encoded data 
#print(response.text)
...