web-dev-qa-db-fra.com

Télécharger une image en utilisant POST données de formulaire dans les requêtes Python

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

18
micheal

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)
33
kev

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. 

2
Yuki Ishikawa
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)
2
Pavel Vergeev

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.

1
Jarek

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)
0
Alex Montoya