Requests.get: примеры (PYTHON)

Работа с функцией requests.get для выполнения HTTP-запросов
Раздел: HTTP-клиенты, GET-запросы
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 остался обратно совместимым.

Расширенные примеры

Загрузка файла с потоковой передачей:

Пример python
response = requests.get('https://httpbin.org/stream/10', stream=True)
for line in response.iter_lines():
    if line:
        print(line.decode('utf-8'))

Использование сессий для сохранения куки:

Пример python
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-прокси:

Пример python
proxies = {
    'http': 'socks5://user:pass@host:port',
    'https': 'socks5://user:pass@host:port'
}
response = requests.get('https://httpbin.org/ip', proxies=proxies)

Кастомные SSL-сертификаты:

Пример python
response = requests.get('https://httpbin.org', verify='/path/to/certfile.pem')

Обработка кодов состояния HTTP:

Пример python
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

питон requests.get function comments

En
Requests.get Send HTTP GET request