Работа с 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
# дальнейшая обработка