将curl转换为python请求

zal*_*alc 15 python curl python-2.7 python-requests

我正在尝试将curl中的以下工作请求转换为python请求(使用Requests http://docs.python-requests.org/en/v0.10.7/).

curl --data 'query={"tags":["test1","test2"]}' http://www.test.com/match
Run Code Online (Sandbox Code Playgroud)

(请注意,我使用了一个假网址,但该命令可以使用真正的网址)

接收端(在Flask中运行)执行此操作:

@app.route("/match", methods=['POST'])
def tagmatch():
    query = json.loads(request.form['query'])
    tags = query.get('tags')
    ... does stuff ...
    return json.dump(stuff)
Run Code Online (Sandbox Code Playgroud)

在curl(7.30)中,在Mac OS X(10.9)上运行上面的命令正确返回使用标记查询过滤的json列表.

我的python脚本如下,它返回一个400错误的请求.

import requests

payload = {"tags":["test1", "test2"]}
# also tried  payload = 'query={"tags":["test1","test2"]}'
url = 'http://www.test.com/match'

r = requests.post(url, data=payload)

if __name__=='__main__':

     print r.text
Run Code Online (Sandbox Code Playgroud)

我觉得我错过了一些小的东西,任何帮助都会受到赞赏.

谢谢

Gou*_*eau 25

http://curl.trillworks.com上有一个很棒的开源cURL到Python请求转换助手.它并不完美,但在很多时候都有帮助.特别是用于转换Chrome"Copy as cURL"命令.如果您需要以编程方式进行转换,还有一个节点库

来自Chrome的cURL


Luk*_*asa 9

您的服务器期待JSON,但您没有发送它.试试这个:

import requests
import json

payload = {'query': json.dumps({"tags":["test1", "test2"]})}
url = 'http://www.test.com/match'

r = requests.post(url, data=payload)

if __name__=='__main__':
    print r.text
Run Code Online (Sandbox Code Playgroud)

  • 在新版本的请求中,还有一个要发布的json参数。 (2认同)

snr*_*snr 6

尝试使用uncurl库。能完成它的工作真是太好了。我试过了。

u = uncurl.parse(
        "curl -X GET 'https://mytesturl.com/' -H  'accept: application/json' -H  'Authorization: 1234567890'")
    print(u)
Run Code Online (Sandbox Code Playgroud)

它打印,

requests.get("https://mytesturl.com/",
    headers={
        "Authorization": "1234567890",
        "accept": "application/json"
    },
    cookies={},
)
Run Code Online (Sandbox Code Playgroud)


小智 5

拯救你的生命

一个更简单的方法是:

  1. 打开邮递员
  2. 单击左上角的“导入”选项卡。
  3. 选择原始文本选项并粘贴您的 cURL 命令。
  4. 点击导入,您将在 Postman 构建器中拥有该命令!

希望这可以帮助!

图片来源:Onkaar Singh