【问题标题】:python requests POST 400 errorpython请求POST 400错误
【发布时间】:2017-04-11 08:36:32
【问题描述】:

我一直在寻找许多与我类似的问题,但找不到解决方案。

我正在使用 requests 来执行 POST 请求。我在请求中尝试了很多组合,但没有返回 201 ok。

这是我的代码:

 import json
 import requests

 if __name__ == '__main__':

    headers = {'content-type' : 'application/json'}
    url = "http://myserver/ext/v3.1/test_device"
    message = {"atribute_a": "value", "atribute_b": "valueb"}
    params = {"priority":"normal"}

    r = requests.post(url, params=params, headers=headers, data = json.dumps(message) )
    print(r)

我也试过没有 json.dumps 但它也给了我 400 错误请求。我也尝试将参数直接添加到网址中,例如:...?priority=normal 但没有成功。

【问题讨论】:

  • requests.post 中的参数和标题之间不应该有逗号吗?
  • 当然是@GauravOjha。我用逗号进行了测试。只是一个糟糕的副本&过去
  • 你试过直接用data = message代替json.dumps吗?
  • 是的@GauravOjha。我在我的代码之后说过,但感谢您尝试帮助我
  • 这可能与您的服务器处理此请求的方式有关。你能说明你的服务器期望什么样的请求吗?

标签: python python-requests


【解决方案1】:

最简单的技术是使用json 而不是data,如下所示:

requests.post(url, headers=headers, params=params, json=data)

【讨论】:

    【解决方案2】:

    根据 cmets,您的服务器实际上期望数据为字符串化 JSON 对象。 就参数而言,如果将它们声明为元组的元组(或字典的字典),这很可能会有所帮助

    试试下面的 -

    headers = {
        'content-type': 'application/json',
    }
    
    params = (
        ('priority', 'normal'),
    )
    
    data = {
        "atribute_a": "value",
        "atribute_b": false
    }
    
    requests.post(url, headers=headers, params=params, data=str(data))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多