Библиотека Requests делает работу с файлами простой и интуитивной. Будь то загрузка файла на сервер или скачивание его с сервера, это можно сделать за несколько строк кода.
Загрузка файлов на сервер обычно происходит с использованием HTTP-метода POST (хотя это также может быть PUT в некоторых случаях). Для этого файл отправляется в теле запроса.
Давайте рассмотрим, как загрузить изображение на сервер:
import requests
url = 'https://api.example.com/upload'
files = {'file': ('filename.jpg', open('filename.jpg', 'rb'))}
response = requests.post(url, files=files)
В приведенном выше коде file
- это имя поля, используемое сервером для получения файла, а filename.jpg
- это имя файла, который мы хотим загрузить. Открыв файл в бинарном режиме rb
, мы гарантируем, что файл будет прочитан корректно независимо от его содержимого.
Скачивание файлов с сервера обычно выполняется с помощью метода GET. После выполнения запроса файл можно сохранить на диск.
Пример скачивания изображения с сервера:
url = 'https://api.example.com/image.jpg'
response = requests.get(url)
with open('downloaded_image.jpg', 'wb') as f:
f.write(response.content)
При скачивании файла важно использовать атрибут content
ответа, так как он содержит бинарные данные ответа.
Если вы работаете с большими файлами, напрямую сохранять response.content может быть неэффективно из-за потребления большого объема памяти. Вместо этого вы можете использовать стриминг:
response = requests.get(url, stream=True)
with open('large_file.jpg', 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
Использование response.iter_content()
позволяет вам читать ответ по частям и записывать его на диск, что особенно полезно при работе с большими файлами.
Вы можете отправлять несколько файлов за один раз, просто добавив их в словарь:
files = {
'file1': ('filename1.jpg', open('filename1.jpg', 'rb')),
'file2': ('filename2.jpg', open('filename2.jpg', 'rb'))
}
response = requests.post(url, files=files)
При отправке файлов вы можете управлять дополнительной информацией, например, заголовками:
custom_headers = {
'file': ('filename.jpg', open('filename.jpg', 'rb'), 'image/jpeg', {'Expires': '0'})
}
response = requests.post(url, files=custom_headers)
Здесь image/jpeg указывает MIME-тип файла, а {'Expires': '0'}
добавляет дополнительные заголовки к файлу.
Если сервер ожидает получение файлов вместе с другими данными формы, вы можете комбинировать files
и data
в одном запросе:
files = {'file': ('filename.jpg', open('filename.jpg', 'rb'))}
data = {'user_id': '12345', 'action': 'upload'}
response = requests.post(url, files=files, data=data)
Библиотека Requests предоставляет простые инструменты для работы с файлами, упрощая процесс их загрузки и скачивания. Благодаря интуитивному интерфейсу и поддержке различных типов данных, Requests становится отличным выбором для взаимодействия с веб-серверами, которые работают с файлами.
Содержание: