3.2 KiB
3.2 KiB
Ответ: HTTP/2 из Python к aillm.ru
Дата: 2026-06-14
Проблема
api.aillm.ru защищен ddos-guard, который требует наличия HTTP/2 в TLS-хендшейке от облачных IP. Библиотека requests работает только по HTTP/1.1, что приводит к ложным ошибкам 401/403.
Решение
Использование библиотеки httpx с установленной поддержкой HTTP/2 через чистый Python-пакет h2.
1. Подготовка зависимостей (requirements.txt)
Так как облачная платформа не всегда корректно обрабатывает синтаксис httpx[http2], необходимо прописать зависимости явно отдельными строками. Это гарантирует установку h2 — pure Python реализации протокола, которая не требует системных библиотек или apt.
# requirements.txt
httpx
h2
2. Код клиента (llm_client.py)
Для работы по HTTP/2 в httpx нужно явно передать параметр http2=True при создании клиента.
import os
import httpx
def ask_llm(prompt: str):
api_url = "https://api.aillm.ru/v1/chat/completions"
api_key = os.getenv("LLM_API_KEY", "sk-ucI5YvOticoOQ9Kuj5K9mQ")
payload = {
"model": "gpt-oss-120b",
"messages": [{"role": "user", "content": prompt}],
"max_tokens": 8000,
"temperature": 0.1
}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
# ВАЖНО: http2=True включает поддержку нужного протокола
with httpx.Client(http2=True, timeout=120) as client:
resp = client.post(api_url, json=payload, headers=headers)
resp.raise_for_status()
return resp.json()
Почему это работает в slim-контейнере
httpx— современный клиент, поддерживающий HTTP/2.h2— это замена системным библиотекамnghttp2. Она написана на чистом Python, поэтому корректно устанавливается черезpipдаже в максимально «обрезанных» образах (*-slim, alpine) без компиляторов иapt.- HTTP/2 Fingerprint — ddos-guard видит поддержку HTTP/2 в TLS Client Hello, что является для него признаком «легального» клиента (браузера или современного SDK), а не простого скрипта на
requestsили старого бота.
Резюме для реализации
- Используйте
httpx.Client(http2=True). - Убедитесь, что
h2есть вrequirements.txtотдельной строкой. - Не используйте
httpx[http2]в конфигах, если платформа капризная.