Python 请求无效消息

Python request invalid message

我是 Python 的新手,正在尝试提出 post 请求。在请求的有效负载中分配变量时,我 运行 遇到了问题。当删除我的变量并简单地放置一个值时,请求工作正常,但是当我尝试为我的变量交换硬值时,我收到错误

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

我已经关注了以下文章,但 none 似乎对我的情况有所帮助

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

这是我的代码片段。在"pagination"

之后的payload中找到变量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 完成此任务。

谢谢

您的问题是 payload 中的 p 只是普通字符 - 不是变量 p

中的值

您将不得不使用字符串格式

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

f-string

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

将值放入字符串中。

顺便说一句:如果必须在 text

中使用 " ",则可以将所有文本放在 ' '

也许最好创建普通字典并使用 json= - 它会将其转换为字符串并添加 header '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)