Запросы Python: как получить и отправить изображение без сохранения на диск?

API, над которым я работаю, имеет метод отправки изображений POSTING в /api/pictures/ с файлом изображения в запросе.

Я хочу автоматизировать некоторые образцы изображений с помощью библиотеки запросов Python, но я не совсем уверен, как это сделать. У меня есть список URL-адресов, указывающих на изображения.

 rv = requests.get('http://api.randomuser.me') resp = rv.json() picture_href = resp['results'][0]['user']['picture']['thumbnail'] rv = requests.get(picture_href) resp = rv.content rv = requests.post(prefix + '/api/pictures/', data = resp) 

rv.content возвращает байт-код. Я получаю 400 Bad Request с сервера, но не появляется сообщение об ошибке. Я полагаю, что я либо неправильно rv.content картину, когда делаю rv.content либо неправильно ее rv.content с data = resp . Я на правильном пути? Как отправить файлы?

–Редактировать–

Я изменил последнюю строку на

 rv = requests.post('myapp.com' + '/api/pictures/', files = {'file': resp}) 

Код на стороне сервера (флажок):

 file = request.files['file'] if file and allowed_file(file.filename): ... else: abort(400, message = 'Picture must exist and be either png, jpg, or jpeg') 

Сервер прерывается с кодом состояния 400 и выше. Я также пробовал читать с BytesIO, не помог.

    Проблема заключается в том, что ваши данные не являются файлом, а потоком байтов. Поэтому у него нет «имени файла», и я подозреваю, что поэтому ваш код сервера не работает.

    Попробуйте отправить правильное имя файла вместе с правильным типом mime с вашим запросом:

     files = {'file': ('user.gif', resp, 'image/gif', {'Expires': '0'})} rv = requests.post('myapp.com' + '/api/pictures/', files = files) 

    Вы можете использовать imghdr для определения того, с каким изображением вы сталкиваетесь (чтобы получить правильный тип mime):

     import imghdr image_type = imghdr.what(None, resp) # You should improve this logic, by possibly creating a # dictionary lookup mime_type = 'image/{}'.format(image_type)