Python запрашивает загрузку изображения, возвращает ошибку 500, но команда curl работает - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь подключиться к конечной точке API для загрузки файла изображения (python3.6 и запросы).

Загрузка должна быть авторизована, что достигается с помощью токена авторизации.Я успешно протестировал API с Почтальоном и cURL.Рабочая команда 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 Внутренняя ошибка сервера .

Я проверил подготовленный запрос, который выглядит следующим образом

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-тип).Это может быть характерно для сервера.

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)


Спасибо за поддержку!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...