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)
我是 Python 的新手,正在尝试提出 post 请求。在请求的有效负载中分配变量时,我 运行 遇到了问题。当删除我的变量并简单地放置一个值时,请求工作正常,但是当我尝试为我的变量交换硬值时,我收到错误
{"error":{"type":"validation","message":"Invalid message"}}
我已经关注了以下文章,但 none 似乎对我的情况有所帮助
https://realpython.com/python-requests/#the-message-body
这是我的代码片段。在"pagination"
之后的payload中找到变量pimport 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)