首页 > 解决方案 > Python 请求无效消息

问题描述

我是 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 执行此任务。

谢谢

标签: pythonhttppython-requestsatom-editor

解决方案


你的问题是ppayload的只是正常的字符 - 不是来自变量的值p

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

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

或者f-string

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

将值放入字符串中。

顺便说一句:' '如果您必须使用" "内部文本,您可以将所有文本放入


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

推荐阅读