【问题标题】:Sending a POST request using httplib使用 httplib 发送 POST 请求
【发布时间】:2013-08-13 18:37:59
【问题描述】:

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


    【解决方案1】:

    看来你在线打错了:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        您的代码有两个错误。首先,您在第三行中使用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()
        

        【讨论】:

          猜你喜欢
          • 2020-12-14
          • 2013-09-24
          • 2013-10-06
          • 2015-02-28
          • 2017-02-13
          • 2021-11-30
          • 2017-05-03
          • 2017-10-30
          • 1970-01-01
          相关资源
          最近更新 更多