Как загружать файлы с помощью библиотеки запросов Python

Введение Python поддерживается многими библиотеками, которые упрощают передачу данных по HTTP. Библиотека запросов - один из самых популярных пакетов Python, поскольку он активно используется при парсинге веб-страниц. Он также популярен для взаимодействия с серверами! Библиотека упрощает загрузку данных в популярном формате, таком как JSON, а также упрощает загрузку файлов. В этом руководстве мы рассмотрим, как загружать файлы с помощью библиотеки запросов Python. Статья начнется с рассмотрения

Вступление

Python поддерживается многими библиотеками, которые упрощают передачу данных по HTTP. Библиотека requests - один из самых популярных пакетов Python, поскольку он активно используется при парсинге веб-страниц. Он также популярен для взаимодействия с серверами! Библиотека упрощает загрузку данных в популярном формате, таком как JSON, а также упрощает загрузку файлов.

В этом руководстве мы рассмотрим, как загружать файлы с помощью библиотеки requests Статья начнется с рассмотрения библиотеки requests и сигнатуры функции post() Далее мы расскажем, как загрузить один файл с помощью пакета requests И последнее, но не менее важное: мы загружаем несколько файлов за один запрос.

Загрузка одного файла с помощью библиотеки запросов Python

В этом руководстве рассказывается, как отправлять файлы, нас не волнует, как они создаются. Чтобы продолжить, создайте три файла с my_file_2.txt my_file.txt , my_file_2.txt и my_file_3.txt .

Первое, что нам нужно сделать, это установить нашу request в нашу рабочую область. Хотя в этом нет необходимости, рекомендуется устанавливать библиотеки в виртуальной среде:

 $ python3 -m venv . 

Активируйте виртуальную среду, чтобы мы больше не влияли на глобальную установку Python:

 $ . bin/activate 

Теперь установим requests с помощью pip :

 $ pip install requests 

Создайте новый файл с именем single_uploader.py котором будет храниться наш код. В этом файле давайте начнем с импорта библиотеки requests

 import requests 

Теперь мы готовы загрузить файл! При загрузке файла нам нужно открыть файл и выполнить потоковую передачу содержимого. В конце концов, мы не можем загрузить файл, к которому у нас нет доступа. Сделаем это с помощью функции open() .

Функция open() принимает два параметра: путь к файлу и режим . Путь к файлу может быть абсолютным или относительным путем к тому месту, где выполняется сценарий. Если вы загружаете файл в тот же каталог, вы можете просто использовать имя файла.

Второй аргумент, режим, будет принимать значение «читать двоичное», которое представлено rb . Этот аргумент сообщает компьютеру, что мы хотим открыть файл в режиме чтения, и мы хотим использовать данные файла в двоичном формате:

 test_file = open("my_file.txt", "rb") 

Примечание : важно читать файл в двоичном режиме. Библиотека requests обычно определяет Content-Length , который представляет собой значение в байтах. Если файл не читается в байтовом режиме, библиотека может получить неверное значение Content-Length , что приведет к ошибкам при отправке файла.

В этом руководстве мы будем делать запросы к бесплатному сервису httpbin . Этот API позволяет разработчикам тестировать свои HTTP-запросы. Давайте создадим переменную, которая хранит URL-адрес, по которому мы будем размещать наши файлы:

 test_url = "http://httpbin.org/post" 

Теперь у нас есть все, чтобы сделать запрос. Мы будем использовать метод post() requests для загрузки файла. Чтобы это работало, нам нужны два аргумента: URL-адрес сервера и свойство files Также сохраним ответ в переменной, напишем следующий код:

 test_response = requests.post(test_url, files = {"form_field_name": test_file}) 

Свойство files принимает словарь. Ключ - это имя поля формы, которое принимает файл. Значение - это байты открытого файла, который вы хотите загрузить.

Обычно, чтобы проверить, был ли ваш post() успешным, мы проверяем код состояния HTTP ответа. Мы можем использовать ok объекта ответа test_url . Если это правда, мы распечатаем ответ HTTP-сервера, в этом случае он отобразит запрос:

 if test_response.ok: 
 print("Upload completed successfully!") 
 print(test_response.text) 
 else: 
 print("Something went wrong!") 

Давай попробуем! В терминале выполните свой скрипт с помощью команды python

 python single_uploader.py 

Ваш результат будет примерно таким:

 Upload completed successfully! 
 { 
 "args": {}, 
 "data": "", 
 "files": { 
 "form_field_name": "This is my file\nI like my file\n" 
 }, 
 "form": {}, 
 "headers": { 
 "Accept": "*/*", 
 "Accept-Encoding": "gzip, deflate", 
 "Content-Length": "189", 
 "Content-Type": "multipart/form-data; boundary=53bb41eb09d784cedc62d521121269f8", 
 "Host": "httpbin.org", 
 "User-Agent": "python-requests/2.25.0", 
 "X-Amzn-Trace-Id": "Root=1-5fc3c190-5dea2c7633a02bcf5e654c2b" 
 }, 
 "json": null, 
 "origin": "102.5.105.200", 
 "url": "http://httpbin.org/post" 
 } 

form_field_name вы можете убедиться, что значение form_field_name совпадает с тем, что находится в вашем файле.

Загрузка нескольких файлов с помощью библиотеки запросов Python

Загрузка нескольких файлов с помощью запросов очень похожа на загрузку одного файла, с основным отличием, которое мы используем списки. Создайте новый файл с именем multi_uploader.py и следующий установочный код:

 import requests 
 
 test_url = "http://httpbin.org/post" 

Теперь создайте переменную с именем test_files которая представляет собой словарь с несколькими именами и файлами:

 test_files = { 
 "test_file_1": open("my_file.txt", "rb"), 
 "test_file_2": open("my_file_2.txt", "rb"), 
 "test_file_3": open("my_file_3.txt", "rb") 
 } 

Как и раньше, ключи - это имена полей формы, а значения - файлы в байтах.

Мы также можем создавать переменные наших файлов в виде списка кортежей. Каждый кортеж содержит имя поля формы, принимающего файл, за которым следует содержимое файла в байтах:

 test_files = [("test_file_1", open("my_file.txt", "rb")), 
 ("test_file_2", open("my_file_2.txt", "rb")), 
 ("test_file_3", open("my_file_3.txt", "rb"))] 

Любой из них работает, поэтому выберите тот, который вам больше нравится!

Когда список файлов будет готов, вы можете отправить запрос и проверить его ответ, как раньше:

 test_response = requests.post(test_url, files = test_files) 
 
 if test_response.ok: 
 print("Upload completed successfully!") 
 print(test_response.text) 
 else: 
 print("Something went wrong!") 

Выполните этот скрипт с помощью команды python

 $ python multi_uploader.py 

Вы увидите этот вывод:

 Upload completed successfully! 
 { 
 "args": {}, 
 "data": "", 
 "files": { 
 "test_file_1": "This is my file\nI like my file\n", 
 "test_file_2": "All your base are belong to us\n", 
 "test_file_3": "It's-a me, Mario!\n" 
 }, 
 "form": {}, 
 "headers": { 
 "Accept": "*/*", 
 "Accept-Encoding": "gzip, deflate", 
 "Content-Length": "470", 
 "Content-Type": "multipart/form-data; boundary=4111c551fb8c61fd14af07bd5df5bb76", 
 "Host": "httpbin.org", 
 "User-Agent": "python-requests/2.25.0", 
 "X-Amzn-Trace-Id": "Root=1-5fc3c744-30404a8b186cf91c7d239034" 
 }, 
 "json": null, 
 "origin": "102.5.105.200", 
 "url": "http://httpbin.org/post" 
 } 

Отличная работа! Вы можете загружать один и несколько файлов с requests !

Заключение

В этой статье мы узнали, как загружать файлы на Python с помощью библиотеки requests Если это один файл или несколько файлов, потребуется всего несколько настроек метода post() Мы также проверили наш ответ, чтобы убедиться, что наши загрузки были успешными.

Содержание