Загрузить изображение с использованием данных формы POST в Python-запросах
Я работаю с wechat API...
здесь я должен загрузить изображение на сервер wechat с помощью этого API
http://admin.wechat.com/wiki/index.php?title=Transferring_Multimedia_Files
url = 'http://file.api.wechat.com/cgi-bin/media/upload?access_token=%s&type=image'%access_token
files = {
'file': (filename, open(filepath, 'rb'),
'Content-Type': 'image/jpeg',
'Content-Length': l
}
r = requests.post(url, files=files)
Я не могу отправлять данные
Ответы
Ответ 1
От wechat api doc:
curl -F [email protected] "http://file.api.wechat.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"
Переведите приведенную выше команду на python:
import requests
url = 'http://file.api.wechat.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE'
files = {'media': open('test.jpg', 'rb')}
requests.post(url, files=files)
Ответ 2
import requests
image_file_descriptor = open('test.jpg', 'rb')
filtes = {'media': image_file_descriptor}
url = '...'
requests.post(url, files=files)
image_file_descriptor.close()
Не забудьте закрыть дескриптор, он предотвращает ошибки: Важно ли явно закрывать файлы?
Ответ 3
Я столкнулся с аналогичной проблемой, когда захотел опубликовать файл изображения в API для отдыха из Python (хотя не для wechat API). Решение для меня состояло в том, чтобы использовать параметр "data" для публикации файла в двоичных данных вместо "файлов". Запросы API-ссылки
data = open('your_image.png','rb').read()
r = requests.post(your_url,data=data)
Надеюсь, это сработает для вашего дела.
Ответ 4
API-интерфейс Rest API для загрузки изображений с хоста на хост:
import urllib2
import requests
api_host = 'https://host.url.com/upload/'
headers = {'Content-Type' : 'image/jpeg'}
image_url = 'http://image.url.com/sample.jpeg'
img_file = urllib2.urlopen(image_url)
response = requests.post(api_host, data=img_file.read(), headers=headers, verify=False)
Вы можете использовать опцию check to False, чтобы исключить проверку SSL для HTTPS-запросов.
Ответ 5
Используйте этот фрагмент
import os
import requests
url = 'http://host:port/endpoint'
with open(path_img, 'rb') as img:
name_img= os.path.basename(path_img)
files= {'image': (name_img,img,'multipart/form-data',{'Expires': '0'}) }
with requests.Session() as s:
r = s.post(url,files=files)
print(r.status_code)