Python请求图像上传返回错误500,但curl命令有效

时间:2018-10-05 11:17:11

标签: python-3.x image curl python-requests

我正在尝试连接到API端点以上传图像文件(python3.6和请求)。

需要对上传进行授权,这可以通过auth令牌来实现。我已经使用Postman和cURL成功测试了API。有效的cURL命令是:

curl -X POST 'https://example.com/api/upload'
-H 'Accept: application/json'
-H 'Authorization: bearer <TOKEN>
-F 'image=@19JA_slingua_IMG_3798-1600x800.jpg'

这会导致响应:

200 OK
{"data":{"id":"<image ID>","type":"image"}}

我使用请求库的python代码基本上如下:

import requests

headers = {
    'Accept': 'application/json',
    'Authorization': 'bearer <TOKEN>',
}

files = {
    'image': ('19JA_slingua_IMG_3798-1600x800.jpg', 
     open('19JA_slingua_IMG_3798-1600x800.jpg', 'rb')),  
}  

response = requests.post('https://example.com/api/upload', 
                          headers=headers, files=files) 

这将返回 500 Internal Server Error

我已经检查了准备好的请求,如下所示

POST https://example.com/api/upload
Authorization: bearer <TOKEN>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100
Safari/537.36
Accept: application / json
Content-Length: 585218
Content-Type: multipart/form-data; boundary=d5c1db2b1bcb448b8e9e6fe852402a90

b'--d5c1db2b1bcb448b8e9e6fe852402a90\r\nContent-Disposition: form-
data; name="image"; filename="19JA_slingua_IMG_3798-
1600x800.jpg"\r\n\r\n\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\
x00\x01\x00\x00\xff\xdb\x00\x84\x00\x02\x01\x01\x01\x01\x01\x02\x01\x01\x0
 1\x02\x02\x02\x02\x02\x04\x03\x02\x02\x02\x02\x05\x04\x04\x03\x04\x06\x05\
x06\x06\x06\x05\x06\x06\x06\

为了解决问题,我已经碰壁了。

编辑:

我已经通过在请求中包含内容类型(MIME-Type)解决了该问题。这可能是特定于服务器的。

import requests  

img_path = 'path/to/img.jpg'

headers = {'Authorization': 'bearer %s' % TOKEN,
           'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
           'Accept': 'application/transit+json',
           }
files = {'image': (img_path.split('/')[-1], open(img_path, 'rb'), 'image/jpeg')}

response = requests.post(ENDPOINT_URL, files=files, headers=headers)


感谢您的支持!

0 个答案:

没有答案