Python 发布请求抛出 400 'Bad Request'错误与请求库,但适用于 cURL



我有一个脚本,调用POST端点,但得到一个400错误。同时,对应的cURL请求成功。

首先是cURL:

curl -X 'POST' 
'http://localhost:8080/api/predict?Key=123testkey' 
-H 'accept: application/json' 
-H 'Content-Type: multipart/form-data' 
-F 'file=@156ac81cde4b3f22faa4055b53867f38.jpg;type=image/jpeg'

翻译成请求:

import requests
url = 'http://localhost:8080/api/predict?Key=123testkey'
headers = {
'accept': 'application/json',
'Content-Type': 'multipart/form-data',
}
params = {'Key' : '123testkey'}
files = {'image': open('156ac81cde4b3f22faa4055b53867f38.jpg', 'rb')}
response = requests.post(url, files=files, params=params, headers=headers)

我也试过使用一个不包含密钥的URL,因为密钥已经在params中指定了:

import requests
url = 'http://localhost:8080/api/predict'
headers = {
'accept': 'application/json',
'Content-Type': 'multipart/form-data',
}
params = {'Key' : '123testkey'}
files = {'image': open('156ac81cde4b3f22faa4055b53867f38.jpg', 'rb')}
response = requests.post(url, files=files, params=params, headers=headers)

我认为这应该很简单,但无论我尝试什么,我总是得到400错误的请求。有什么建议吗?

编辑:我也试过用'image/jpeg'代替'image',但没有效果。

编辑:替换图片"带有"文件"不幸的是没有工作

编辑:它在邮差桌面工作得很好,并生成以下代码。然而,这段代码也抛出一个错误。

从postman生成的代码:

import requests
url = "http://localhost:8080/api/predict?Key=123test"
payload={}
files=[
('file',('images19.jpg',open('156ac81cde4b3f22faa4055b53867f38.jpg','rb'),'image/jpeg'))
]
headers = {
'Accept': 'application/json',
'Content-Type': 'multipart/form-data'
}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)

和之前从postman生成的代码中的错误:

{"detail":"There was an error parsing the body"}

任何帮助弄清楚发生了什么将非常感激!

你的问题是在变量文件中,你需要添加关键'file'而不是'image',这是你的curl和python代码之间的区别,也删除头,因为当你传递文件参数的请求设置适当的头发送文件。例如:

import requests
url = 'http://localhost:8080/api/predict?Key=123testkey'
params = {'Key' : '123testkey'}
files = {'file': open('156ac81cde4b3f22faa4055b53867f38.jpg', 'rb')}
response = requests.post(url, files=files, params=params)

相关内容

  • 没有找到相关文章

最新更新