我正在尝试使用请求向服务器发送简单的POST请求。我正在做(至少我想)快速启动(http://docs.python-requests.org/en/master/user/quickstart/)正在做什么。 POST请求似乎忽略了data =标记,并且没有将数据附加到url的末尾。这就是我所拥有的:
import requests, json
url = 'http://localhost:5000/todo/api/v1.0/tasks'
payload = (('key1', 'value1'), ('key1', 'value2'))
r=requests.post(url, data=payload)
print 'url is: ', r.url
,输出为:
url is: http://localhost:5000/todo/api/v1.0/tasks
我不知道它是否相关,但是如果我使用GET标签params =,则网址会按照我的预期进行组合:
r=requests.post(url, params=payload)
url is: http://localhost:5000/todo/api/v1.0/tasks/?key1=value&key1=value2
有人看错了吗?提前致谢
答案 0 :(得分:0)
尝试将payload
转储到json
并使用dict
payload = {}
payload[key1] = value1
payload[key2] = value2
payload_data = json.dumps(payload)
r=requests.post(url, data=payload_data)
答案 1 :(得分:0)
POST
数据在请求正文中传递,而不是URL。 POST
HTTP请求看起来像这样
POST /login HTTP/1.1
Host: example.com
Content-Length: <length>
firstname=john&lastname=doe
因为你可以看到URL没有传递这些参数,这很重要,因为我在这个答案中没有提到很多原因。但是,如果由于某种原因你确实需要在URL而不是请求的主体中传递这些参数,那么这就是你可能会这样做的。
import requests, urllib
url = 'http://localhost:5000/todo/api/v1.0/tasks'
payload = (('key1', 'value1'), ('key1', 'value2'))
request_data = urllib.urlencode(payload) # Turns it into key1=value1&key1=value2
response = requests.post(url + "?" + request_data)
这将以您在答案底部的GET请求中看到的相同方式制作请求,而是作为POST请求。