将 cURL 命令转换为 python 请求

Posted

技术标签:

【中文标题】将 cURL 命令转换为 python 请求【英文标题】:Converting a cURL command to a python request 【发布时间】:2018-10-21 00:47:00 【问题描述】:

我是 cURL 的新手;我想转换这种结构的 curl 命令:

curl -X POST "http://127.0.0.1:8881/models/faewrfaw/v1/predict" -H "Content-Type:multipart/form-data" -F "data=\"key\": \"Path\";type=application/json" -F "Path=@C:\Users\rtam\Music\1 2 3\TEST123.jpg"

到 python 请求。我使用https://curl.trillworks.com/ 来帮助我并将其作为输出:

import requests

headers = 
    'Content-Type': 'multipart/form-data',


files = 
    'data': (None, '"key": "Path";type'),
    'Path': ('C:\\Users\\rtam\\Music\\1 2 3\\TEST123.jpg', open('C:\\Users\\rtam\\Music\\1 2 3\\TEST123.jpg', 'rb')),


response = requests.post('http://127.0.0.1:8881/models/faewrfaw/v1/predict', headers=headers, files=files)

但是,在 python 中测试响应时,我收到了一个错误的请求/请求,服务器无法理解。我注意到 trillworks 网站在其格式中没有考虑类型(应用程序/json),是否需要在 python 脚本中?

【问题讨论】:

你能包括你得到的请求错误吗? 所以我尝试输入: print(response.text) print(response.status_code) 并收到此错误,并显示 400 Bad Request 状态代码: 400 错误请求

错误请求

浏览器(或代理)发送了此服务器无法理解的请求。

400
我建议比较两种情况下发送的实际请求,看看有什么不同。对于查看来自requests 和来自curl 的请求的内容,存在一些问题。 【参考方案1】:

此答案可能对您有所帮助:How to send JSON as part of multipart POST-request

在你的情况下是

files = 
    'Path': (
        'C:\\Users\\rtam\\Music\\1 2 3\\TEST123.jpg', 
        open('C:\\Users\\rtam\\Music\\1 2 3\\TEST123.jpg', 'rb'), 
        'application/octet-stream'
    )
    'data': (None, '"key": "Path"', 'application/json'),


response = requests.post(
    'http://127.0.0.1:8881/models/faewrfaw/v1/predict',
    files=files
)

【讨论】:

感谢您的链接。我看到了您的更改——删除了标题并添加了八位字节流——但我仍然得到 400 Bad Request <h1>错误请求</h1> <p>浏览器(或代理)发送了此服务器无法理解的请求。</p> 可能是文件名无效?尝试仅使用 TEST123.jpg 作为 Path 元组中的第一个元素。

以上是关于将 cURL 命令转换为 python 请求的主要内容,如果未能解决你的问题,请参考以下文章

将 curl 命令转换为 http 请求接口

将 cURL 命令转换为 http put 请求

将命令 cURL 转换为 HTTP 请求

将 Paypal cURL 命令转换为 Axios 请求

将curl转换为python请求

如何将此 curl 命令转换为 Ruby rest-client put 请求?