使用httplib发送POST请求

问题描述 投票:0回答:3

我正在尝试使用httplib发送数据。这是我的代码:

headers = {'User-agent': 'agent','Accept': 'application/json'}
params = { 'api_key':'kjdksnjd45555','ts':455555555}
data = {'job1':42,'job2':85}
params['data'] = json.dumps(data,separators =(',',':'))
re = requests.post(url,headers,params)
print re.json()   

当我使用请求时,它工作得很好,但不是当我使用httplib

params = urllib.urlencode(params)
con = httplib.HTTPConnection('api.sandbox.gengo.com')
con.request("POST", "/api/v", param, headers)
r2 = con.getresponse()
r2.read()

它返回以下错误:

"msg":"\\"api_key\\" is a required field"}  

(这意味着它无法恢复我的数据。)

我该怎么办?谢谢。

python post http-post httplib
3个回答
0
投票

看起来你有一个拼写错误:

con.request("POST", "/api/v", param, headers)

不应该是params而不是param。这可以解释为什么服务器正在响应丢失的api_key


0
投票

HTTPConnection.request的第三个参数不是http请求参数。它是POST请求体。参数是网址的一部分,应该这样发送。

https://docs.python.org/3/library/http.client.html?#http.client.HTTPConnection


0
投票

你的代码有两个错误。首先,您在第三行使用param而不是params,但您也将请求体的参数作为请求参数传递。

试试下一个代码:

params = urllib.urlencode(params)
con = httplib.HTTPConnection('api.sandbox.gengo.com')
con.request("POST", "/api/v?" + params, "", headers)
r2 = con.getresponse()
r2.read()
© www.soinside.com 2019 - 2024. All rights reserved.