Je travaille avec les API wechat ... Ici, je dois télécharger une image sur le serveur wechat à l'aide de cette API http://admin.wechat.com/wiki/index.php?title= Transférer_Fichiers_Multimédia
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)
Je ne peux pas poster de données
De wechat api doc:
curl -F [email protected] "http://file.api.wechat.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"
Traduisez la commande ci-dessus en 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)
J'ai été confronté à un problème similaire lorsque je voulais publier un fichier image sur une API Rest de Python (ce n'est pas l'API wechat). La solution pour moi était d'utiliser le paramètre 'data' pour poster le fichier en données binaires au lieu de 'fichiers'. Référence API des demandes
data = open('your_image.png','rb').read()
r = requests.post(your_url,data=data)
J'espère que cela fonctionne pour votre cas.
import requests
image_file_descriptor = open('test.jpg', 'rb')
files = {'media': image_file_descriptor}
# don't forget to close the descriptor, it prevents bugs
# see https://stackoverflow.com/questions/7395542/is-explicitly-closing-files-important
image_file_descriptor.close()
url = '...'
requests.post(url, files=files)
Pour que l'API Rest télécharge des images d'hôte à hôte:
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)
Vous pouvez utiliser l'option verify définie sur False pour omettre la vérification SSL pour les demandes HTTPS.
Utilisez cet extrait
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)