Работа с HTTPS в Python: библиотека requests и её возможности

Раздел: Веб-разработка -> сетевые запросы

HTTPS запросы с помощью библиотеки requests

Библиотека requests является стандартным инструментом для выполнения HTTP-запросов в Python. Она поддерживает HTTPS без дополнительных настроек: достаточно указать URL с протоколом https. Автоматически проверяется сертификат сервера, что гарантирует безопасность соединения.

import requests

response = requests.get('https://httpbin.org/get')
print(response.status_code)
print(response.text)

узнать ip python (получение ip адреса с помощью python)

Для обработки возможных ошибок соединения или таймаутов используется блок try/except.

try:
    response = requests.get('https://example.com', timeout=5)
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f'Ошибка: {e}')

Python request https (https запросы с requests)

Как выполнить GET запрос с query-параметрами?

Параметры передаются через словарь params.

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)

Python requests data (работа с http запросами через библиотеку requests в python)

https://httpbin.org/get?key1=value1&key2=value2

Как отправить POST запрос с данными?

Для передачи формы используется data, для JSON – json.

data = {'username': 'user', 'password': 'pass'}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())

import json
response = requests.post('https://httpbin.org/post', json={'key': 'value'})
print(response.json())

Как добавить кастомные заголовки?

Заголовки задаются в параметре headers.

headers = {'User-Agent': 'MyApp/1.0', 'Authorization': 'Bearer token123'}
response = requests.get('https://httpbin.org/headers', headers=headers)
print(response.text)

Как игнорировать ошибки SSL (самоподписанный сертификат)?

Установка verify=False отключает проверку сертификата. Следует использовать только для отладки.

response = requests.get('https://self-signed.badssl.com/', verify=False)
print(response.status_code)

При использовании verify=False requests выводит предупреждение InsecureRequestWarning. Для его подавления можно использовать urllib3.disable_warnings().

Как использовать сессию для сохранения куки?

Объект Session сохраняет куки между запросами и позволяет задать общие параметры.

session = requests.Session()
session.headers.update({'User-Agent': 'Mozilla/5.0'})
session.get('https://httpbin.org/cookies/set?name=value')
response = session.get('https://httpbin.org/cookies')
print(response.json())

Как настроить таймаут соединения и чтения?

Параметр timeout принимает число секунд или кортеж (connect, read).

try:
    response = requests.get('https://httpbin.org/delay/3', timeout=(2, 5))
except requests.exceptions.Timeout:
    print('Таймаут')

Как использовать прокси?

Параметр proxies задает прокси для каждого протокола.

proxies = {'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080'}
response = requests.get('https://example.com', proxies=proxies)

Если прокси требует аутентификации, укажите логин и пароль в URL: http://user:pass@proxy:port.

Как отправить multipart-файл?

Параметр files принимает словарь с файлами.

files = {'file': open('report.xls', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())

Как обработать ошибки соединения?

Используются исключения библиотеки requests: ConnectionError, Timeout, HTTPError и RequestException как базовое.

try:
    response = requests.get('https://nonexistent.domain', timeout=3)
except requests.exceptions.ConnectionError:
    print('Не удалось подключиться')
except requests.exceptions.Timeout:
    print('Превышено время ожидания')

Как использовать клиентский сертификат?

Параметр cert принимает путь к файлу сертификата и ключа.

response = requests.get('https://example.com', cert=('/path/to/client.crt', '/path/to/client.key'))

Расширенные примеры работы с HTTPS запросами

Потоковая загрузка больших файлов

Параметр stream=True позволяет получать ответ чанками, не загружая всё в память.

Пример
response = requests.get('https://cdn.example.com/largefile.zip', stream=True)
with open('largefile.zip', 'wb') as f:
    for chunk in response.iter_content(chunk_size=8192):
        f.write(chunk)

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

Адаптер позволяет управлять количеством соединений и таймаутами на уровне транспорта.

Пример
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

session = requests.Session()
retries = Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504])
adapter = HTTPAdapter(max_retries=retries, pool_connections=20, pool_maxsize=20)
session.mount('https://', adapter)

response = session.get('https://httpbin.org/status/500')
print(response.status_code)

Асинхронные запросы с помощью concurrent.futures

Хотя requests синхронный, можно выполнять несколько запросов параллельно, используя ThreadPoolExecutor.

Пример
import concurrent.futures
import requests

urls = ['https://httpbin.org/delay/1'] * 5

def fetch(url):
    return requests.get(url).status_code

with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
    results = list(executor.map(fetch, urls))
    print(results)

Работа с сертификатами CA (проверка по собственному удостоверяющему центру)

Для использования собственного CA-сертификата передайте путь к нему в verify.

Пример
response = requests.get('https://internal.company.com', verify='/path/to/ca-bundle.crt')
print(response.status_code)

Автоматическое следование редиректам и их отключение

По умолчанию requests следует редиректам (до 30). Отключить можно через allow_redirects=False.

Пример
response = requests.get('https://httpbin.org/redirect/1', allow_redirects=False)
print(response.status_code)
print(response.headers['Location'])

Сохранение куки в файл и их загрузка

Для постоянного хранения кук можно использовать requests.utils.dict_from_cookiejar и cookiejar_from_dict.

Пример
import requests
from http.cookiejar import LWPCookieJar

session = requests.Session()
session.cookies = LWPCookieJar('cookies.txt')
# загрузить ранее сохраненные
session.cookies.load(ignore_discard=True, ignore_expires=True)

# после запроса сохранить
response = session.get('https://httpbin.org/cookies/set?name=value')
session.cookies.save(ignore_discard=True, ignore_expires=True)

Использование OAuth2 (получение токена)

С помощью requests можно реализовать OAuth2 flow вручную.

Пример
import requests

# Client Credentials Grant
token_url = 'https://auth.example.com/oauth/token'
client_id = '...'
client_secret = '...'

data = {
    'grant_type': 'client_credentials',
    'client_id': client_id,
    'client_secret': client_secret,
}
response = requests.post(token_url, data=data)
token = response.json()['access_token']

# Использование токена
headers = {'Authorization': f'Bearer {token}'}
response = requests.get('https://api.example.com/data', headers=headers)
print(response.json())

Проверка SSL сертификата с указанием хэша отпечатка

Можно проверить сертификат по его SHA256 отпечатку, используя кастомный транспорт.

Пример
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

# В этом примере показано только как получить отпечаток, реальная проверка требует подкласса HTTPAdapter
response = requests.get('https://httpbin.org', verify=False)
cert = response.raw.peercert
# дальнейшая обработка

HTTPS запросы с requests - comments

En
Python request https (python)