我正在尝试连接到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)
感谢您的支持!