it-swarm.com.de

Bild hochladen mit POST Formulardaten in Python-Anfragen

Ich arbeite mit wechat-APIs ....__ hier muss ich ein Bild mit dieser API auf den wechat-Server hochladen http://admin.wechat.com/wiki/index.php?title= Übertragen von Multimedia-Dateien

    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)

Ich kann keine Daten posten

18
micheal

Von wechat api doc:

curl -F [email protected] "http://file.api.wechat.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"

Übersetzen Sie den obigen Befehl in 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

Ich war mit einem ähnlichen Problem konfrontiert, als ich eine Bild-Datei von Python an eine Rest-API senden wollte (nicht wechat API). Die Lösung für mich war, den Parameter 'data' zu verwenden, um die Datei in binären Daten statt in 'files' zu veröffentlichen. Requests-API-Referenz

data = open('your_image.png','rb').read()
r = requests.post(your_url,data=data)

Hoffe das klappt für deinen Fall. 

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

Für die Rest-API zum Hochladen von Bildern vom Host zum Host:

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)

Sie können die Option "Verify" auf "False" setzen, um die SSL-Überprüfung für HTTPS-Anforderungen zu unterlassen.

1
Jarek

Verwenden Sie dieses Snippet 

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