Requests.get: примеры (PYTHON)
requests.get(url, params, kwargs): requests.ResponseФункция requests.get() из библиотеки Requests предназначена для выполнения HTTP-запросов метода GET. Она применяется для получения данных с указанного URL-адреса. Основная задача функции - отправка запроса к веб-серверу и получение ответа.
Аргументы функции
Основные параметры функции requests.get():
- url (обязательный) - строка с адресом, на который отправляется запрос.
- params - словарь, список кортежей или байты для отправки в строке запроса URL.
- headers - словарь HTTP-заголовков для отправки с запросом.
- cookies - словарь или объект CookieJar для отправки с запросом.
- auth - кортеж для включения аутентификации HTTP Basic/Digest.
- timeout - число или кортеж, определяющее время ожидания ответа в секундах.
- allow_redirects - булево значение, разрешающее или запрещающее следование за перенаправлениями.
- proxies - словарь, определяющий прокси-серверы для использования по протоколам.
- verify - булево значение или строка, указывающая на проверку SSL-сертификата.
- stream - если True, содержимое ответа загружается по мере необходимости.
Возвращаемое значение
Функция возвращает объект Response, который содержит ответ сервера. Объект имеет атрибуты:
- status_code - код состояния HTTP.
- headers - заголовки ответа в виде словаря.
- text - содержимое ответа в Unicode.
- content - содержимое ответа в байтах.
- json() - метод для декодирования JSON-ответа.
- url - окончательный URL после перенаправлений.
Примеры использования
Простой GET-запрос:
import requests
response = requests.get('https://api.github.com')
print(response.status_code)200
Запрос с параметрами:
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)https://httpbin.org/get?key1=value1&key2=value2
Запрос с заголовками:
headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://httpbin.org/headers', headers=headers)
print(response.json()['headers']['User-Agent'])my-app/0.0.1
Запрос с аутентификацией:
response = requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))
print(response.status_code)200
Похожие функции в Python
Библиотека urllib.request из стандартной библиотеки предоставляет функцию urlopen(). Она менее удобна, чем Requests, но не требует установки дополнительных пакетов.
Асинхронная библиотека aiohttp предлагает функцию aiohttp.ClientSession.get() для асинхронных запросов. Ее стоит использовать в асинхронных приложениях.
Библиотека httpx - современная альтернатива с поддержкой HTTP/2 и асинхронных запросов. Ее интерфейс похож на Requests.
Выбор зависит от требований проекта. Requests подходит для синхронных скриптов, aiohttp - для асинхронных приложений, httpx - для современных проектов с поддержкой HTTP/2.
Альтернативы в других языках
JavaScript (Fetch API):
fetch('https://api.github.com')
.then(response => response.json())
.then(data => console.log(data));PHP (cURL):
$ch = curl_init('https://api.github.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;Java (HttpURLConnection):
URL url = new URL("https://api.github.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();Основное отличие - в синтаксисе и объемах кода. Python-библиотека Requests считается одной из самых простых для использования.
Типичные ошибки
Необработанные исключения:
import requests
response = requests.get('https://несуществующий-сайт.рф')
print(response.status_code)requests.exceptions.ConnectionError
Ошибка чтения JSON при некорректном ответе:
response = requests.get('https://httpbin.org/html')
data = response.json()requests.exceptions.JSONDecodeError
Таймаут соединения:
response = requests.get('https://httpbin.org/delay/10', timeout=2)requests.exceptions.ConnectTimeout
Использование неверного параметра verify:
response = requests.get('https://self-signed.badssl.com', verify=False)Предупреждение о безопасности SSL
Изменения в последних версиях
В версии 2.28.0 библиотеки Requests параметр timeout по умолчанию больше не равен None. Теперь рекомендуется явно указывать таймаут.
В версии 2.25.0 улучшена поддержка международных доменных имен (IDNA).
Начиная с версии 2.4.0, объект PreparedRequest имеет атрибут body, который теперь всегда байтовый.
Версия 2.0.0 принесла значительные изменения в внутреннюю структуру, но API остался обратно совместимым.
Расширенные примеры
Загрузка файла с потоковой передачей:
response = requests.get('https://httpbin.org/stream/10', stream=True)
for line in response.iter_lines():
if line:
print(line.decode('utf-8'))Использование сессий для сохранения куки:
session = requests.Session()
session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
response = session.get('https://httpbin.org/cookies')
print(response.json()){"cookies": {"sessioncookie": "123456789"}}Запрос через SOCKS-прокси:
proxies = {
'http': 'socks5://user:pass@host:port',
'https': 'socks5://user:pass@host:port'
}
response = requests.get('https://httpbin.org/ip', proxies=proxies)Кастомные SSL-сертификаты:
response = requests.get('https://httpbin.org', verify='/path/to/certfile.pem')Обработка кодов состояния HTTP:
response = requests.get('https://httpbin.org/status/404')
try:
response.raise_for_status()
except requests.exceptions.HTTPError as err:
print(f'HTTP ошибка: {err}')HTTP ошибка: 404 Client Error