我正在尝试使用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"}
(这意味着它无法恢复我的数据。)
我该怎么办?谢谢。
看起来你有一个拼写错误:
con.request("POST", "/api/v", param, headers)
不应该是params
而不是param
。这可以解释为什么服务器正在响应丢失的api_key
HTTPConnection.request的第三个参数不是http请求参数。它是POST请求体。参数是网址的一部分,应该这样发送。
https://docs.python.org/3/library/http.client.html?#http.client.HTTPConnection
你的代码有两个错误。首先,您在第三行使用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()