【问题标题】:Converting a curl to Python requests.put将 curl 转换为 Python requests.put
【发布时间】:2015-07-21 14:45:17
【问题描述】:

我查了几件事情,只是没有找到一件完全符合我正在做的事情。我找到了一些接近的,但我似乎无法得到它。

我有这个 curl 声明。成功时返回 204,并且工作正常。

# curl -v -H "Content-type: application/json" -X PUT -d '{"latitude":47.629355,"longitude":-122.3794778}' "http://myserver.com/location/private/location"

当我尝试将其转换为 Python 请求时,它似乎应该如下:

headers = {'Content-type': 'application/json'}
data = {"latitude":'47.629355',"longitude":'-122.3794778'}
r = requests.put("http://myserver.com/location/private/location", headers=headers, data=data)

但是,这失败并返回 400(错误请求)。所以我的形成方式不太对劲。

我一直在研究它,更改引号等。但根据我在 SO 和 http://docs.python-requests.org/ 上所读到的内容,在我看来我做得对。

任何智慧分享将不胜感激。谢谢!

【问题讨论】:

  • 您在 curl 调用中将 lat/long 作为浮点数提供,但在 python 代码中作为字符串提供。尝试:data = {"latitude":47.629355,"longitude": -122.3794778}。否则代码看起来很好。
  • 这也是我最初拥有的数据,但它不起作用。我再次尝试以确保我没有错过它,但仍然无法正常工作。仍然得到 400。
  • 打印 r.text 向我显示“无效请求:无法读取数字:latitude=47.629355&longitude=-122.3794778”

标签: python curl python-requests


【解决方案1】:

尝试将data 替换为json.dumps(data)

import json
r = requests.put("http://myserver.com/location/private/location", headers=headers, data=json.dumps(data))

【讨论】:

    【解决方案2】:

    啊!!!

    发现错误。在卷曲中,我路过:

    '{"latitude":47.629355,"longitude":-122.3794778}'
    

    在我传递的 request.put 中:

    {"latitude":47.629355,"longitude":-122.3794778}
    

    我错过了将整个事情整合到我的服务所期望的外部报价。

    【讨论】:

      猜你喜欢
      • 2011-03-31
      • 2016-05-28
      • 1970-01-01
      • 2016-01-30
      • 2020-03-18
      • 2017-09-11
      • 1970-01-01
      相关资源
      最近更新 更多