Prześlij obraz przy użyciu danych formularza POST w żądaniach Pythona


Pracuję z API wechat ...
tutaj muszę przesłać obraz do serwera wechat za pomocą tego interfejsu API

http://admin.wechat.com/wiki/i ... Files
http://admin.wechat.com/wiki/i ... 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)

Nie mogę publikować danych
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Z dokumentu wechat api:
curl -F media=@test.jpg "[url=http://file.api.wechat.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"]http://file.api.wechat.com/cgi ... ot%3B[/url]

Przetłumacz powyższe polecenie na 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)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Podobny problem napotkałem, gdy chciałem wysłać plik obrazu do pozostałego API z Pythona (ale nie z wechat API). Rozwiązaniem dla mnie było użycie parametru „data”, aby umieścić plik w postaci danych binarnych zamiast „plików”.

Żąda łącza API
http://requests.readthedocs.io/en/latest/api/
data = open('your_image.png','rb').read()
r = requests.post(your_url,data=data)

Mam nadzieję, że to zadziała w twoim przypadku.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Użyj tego fragmentu kodu
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)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

import requestsimage_file_descriptor = open('test.jpg', 'rb')
url = '...'
requests.post(url, files=files)
image_file_descriptor.close()

Nie zapomnij zamknąć klamki, co zapobiega błędom:

czy ważne jest jawne zamykanie plików?
https://coderoad.ru/7395542/
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Aby interfejs API Rest ładował obrazy z jednego hosta do drugiego:
import urllib2
import requestsapi_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)

Możesz użyć opcji walidacji ustawionej na false, aby wykluczyć sprawdzanie poprawności SSL dla żądań HTTPS.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

client.py
files = {
'file': ( os.path.basename('path/to/file'),
open('path/to/file', 'rb'),
'application/octet-stream'
)
}
requests.post(url, files=files)

server.py
@app.route('/', methods=['POST'])
def index(): picture = request.files.get('file')
picture.save('path/to/save') return 'ok', 200

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się