Скрипт Python 3 для загрузки файла в REST URL (многочастный запрос) - PullRequest
5 голосов
/ 09 ноября 2011

Я довольно новичок в Python и использую Python 3.2.Я пытаюсь написать скрипт Python, который будет выбирать файл с компьютера пользователя (например, файл изображения) и отправлять его на сервер, используя вызов на основе REST.Сценарий Python должен вызывать URL-адрес REST и отправлять файл при вызове сценария.

Это похоже на многочастный POST, который выполняется браузером при загрузке файла;но здесь я хочу сделать это с помощью скрипта Python.

Если возможно, я не хочу добавлять какие-либо внешние библиотеки в Python и хотел бы сохранить его довольно простым скриптом Python с использованием базовой установки Python.

Кто-нибудь может направить меня?или поделитесь каким-нибудь примером сценария, который достиг бы того, чего я хочу?

Ответы [ 3 ]

8 голосов
/ 09 ноября 2011

Библиотека запросов - это то, что вам нужно. Вы можете установить с pip install requests.

http://docs.python -requests.org / ен / последний / пользователь / Быстрый старт / # пост-а-многочастному-кодированной-файл

>>> url = 'http://httpbin.org/post'
>>> files = {'file': open('report.xls', 'rb')}
>>> r = requests.post(url, files=files)
4 голосов
/ 09 ноября 2011

RESTful способ загрузить изображение будет использовать PUT запрос, если вы знаете, что URL-адрес изображения:

#!/usr/bin/env python3
import http.client 

h = http.client.HTTPConnection('example.com')
h.request('PUT', '/file/pic.jpg', open('pic.jpg', 'rb'))
print(h.getresponse().read())

upload_docs.py содержит пример загрузки файла в формате multipart/form-data с базовой аутентификацией http. Он поддерживает как Python 2.x, так и Python 3.

Вы также можете использовать requests для публикации файлов как multipart/form-data:

#!/usr/bin/env python3
import requests

response = requests.post('http://httpbin.org/post',
                         files={'file': open('filename','rb')})
print(response.content)
0 голосов
/ 19 января 2016

Вы также можете использовать unirest.Пример кода

import unirest

# consume async post request
def consumePOSTRequestSync():
 params = {'test1':'param1','test2':'param2'}

 # we need to pass a dummy variable which is open method
 # actually unirest does not provide variable to shift between
 # application-x-www-form-urlencoded and
 # multipart/form-data
 params['dummy'] = open('dummy.txt', 'r')
 url = 'http://httpbin.org/post'
 headers = {"Accept": "application/json"}
 # call get service with headers and params
 response = unirest.post(url, headers = headers,params = params)
 print "code:"+ str(response.code)
 print "******************"
 print "headers:"+ str(response.headers)
 print "******************"
 print "body:"+ str(response.body)
 print "******************"
 print "raw_body:"+ str(response.raw_body)

# post sync request multipart/form-data
consumePOSTRequestSync()

Вы можете проверить этот пост http://stackandqueue.com/?p=57 для более подробной информации

...