使用httplib发送POST请求

时间:2013-08-13 18:37:59

标签: python post http-post httplib

我正在尝试使用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"}  

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

我可以尝试什么?感谢。

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分: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()