这是API调用的原始请求:
POST http://192.168.3.45:8080/api/v2/event/log?sessionKey=b299d17b896417a7b18f46544d40adb734240cc2&format=json HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json
Content-Length: 86
Host: 192.168.3.45:8080
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
{"eventType":"AAS_PORTAL_START","data":{"uid":"hfe3hf45huf33545","aid":"1","vid":"1"}}
此请求返回成功(2xx)响应。
现在我尝试使用requests
发布此请求:
import requests
headers = {'content-type' : 'application/json'}
data ={"eventType" : "AAS_PORTAL_START",
"data" : {"uid": "hfe3hf45huf33545",
"aid": "1",
"vid": "1"}
}
url = ("http://192.168.3.45:8080/api/v2/event/log?"
"sessionKey=9ebbd0b25760557393a43064a92bae539d962103&"
"format=xml&"
"platformId=1")
requests.post(url, params=data, headers=headers)
此请求的响应为
<Response [400]>
一切看起来很好,我不太清楚我张贴错误,以获得400的React。
3条答案
按热度按时间sqyvllje1#
params
用于GET样式的URL参数,data
用于POST样式的正文信息,在请求中提供这两种类型的信息是完全法律的的,您的请求也是这样做的,但是您已经将URL参数编码到URL中了。你的原始帖子包含 JSON 数据,
requests
可以为你处理JSON编码,并且它也会设置正确的Content-Type
头;您所需要做的就是将要编码为JSON的Python对象传入json
关键字参数。您还可以拆分URL参数:
然后将您的数据发布到:
json
关键字是requests
版本2.4.2中新增的;如果仍然需要使用旧版本,则使用json
模块手动编码JSON,并将编码结果作为data
密钥发布;在这种情况下,您必须显式设置Content-Type标头:irlmq6kh2#
给响应赋值并测试它的属性,这些应该会告诉你一些有用的信息。
k4ymrczo3#
将数据设置为: