【问题标题】:Python Requests PUT not working, but cURL doesPython 请求 PUT 不起作用,但 cURL 可以
【发布时间】:2014-05-09 17:32:58
【问题描述】:

我正在使用RequestsPUT 数据发送到Python 中的Pipeline Deals API,虽然我得到了Response 200,但数据实际上并没有成功PUT。当我使用cURL 提出完全相同的请求时,它确实如此。这是不起作用的 Python 代码:

param = {'api_key': 'MY API KEY'}
url = "https://api.pipelinedeals.com/api/v3/companies/14634816.json"
r = requests.put(url, params=param, data="company[name]=Python")
print r
--> <Response [200]>

当我运行这个cURL 代码时,它可以工作:

curl --X PUT -d "company[name]=cURL" \
"https://api.pipelinedeals.com/api/v3/companies/14634816.json?api_key=SAME_API_KEY"

我错过了什么吗?或者我是否可能遇到了请求库中的错误,例如 https 附近?

谢谢!

【问题讨论】:

  • 尝试使用 --verbose 选项运行 curl 并将请求标头与 python 请求中的标头进行比较

标签: python rest curl https python-requests


【解决方案1】:

稍微改一下网址:

url = "https://api.pipelinedeals.com/api/v3/companies/14634816.json?api_key=MY_API_KEY"

然后是参数:

param = {"company[name]":"Python"}

现在到PUT

r = requests.put(url, data=param)

【讨论】:

  • 成功了!我玩了一下,实际上问题似乎不是将 API 密钥添加到 URL,而是将数据编码为 {"company[name]":"Python"}。因此,根据documentation,可以将 PUT 作为 JSON 或字符串。知道我会怎么做:{'company':{'name':'Python'}}
  • 不确定,但可能是这样的{"company":{"name":"Python"}}(如果需要它的json)。
  • 明白了。那不起作用(或其他变体),但我认为{"company[name]":"Python"} 应该可以正常工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2018-05-20
  • 1970-01-01
  • 2018-07-26
  • 2011-08-16
  • 1970-01-01
相关资源
最近更新 更多