С HTTPX передайте один URL прокси в AsyncClient(proxy=...), повторно используйте клиент между запросами и ограничьте параллелизм с помощью семафора. Для ротации назначьте небольшую группу работников для прокси-эндпоинтов вместо того, чтобы создавать новый клиент для каждого URL. Повторные попытки должны быть ограничены, наблюдаемы и ограничены временными сбоями.
Попробуйте Nstproxy Proxy - Начните Бесплатно Уже Сегодня
import
asyncio
import
httpx
PROXY
=
"http://USERNAME:PASSWORD@gate.example:8000"
async
def
main
(
)
:
timeout
=
httpx
.
Timeout
(
20.0
,
connect
=
10.0
)
limits
=
httpx
.
Limits
(
max_connections
=
20
,
max_keepalive_connections
=
10
)
async
with
httpx
.
AsyncClient
(
proxy
=
PROXY
,
timeout
=
timeout
,
limits
=
limits
,
follow_redirects
=
True
,
)
as
client
:
response
=
await
client
.
get
(
"https://example.com/authorized-page"
)
response
.
raise_for_status
(
)
print
(
response
.
status_code
,
len
(
response
.
content
)
)
asyncio
.
run
(
main
(
)
)
Используйте переменные окружения или менеджер секретов для учетных данных в производственной среде. Не комитите их в систему контроля версий.
Ментальная модель: Асинхронность увеличивает одновременные работы; это не увеличивает безопасный бюджет запросов к целевому объекту.
Ротация прокси без разрушения пулов подключений
Этот пример назначает URL-адреса многолетним клиентам. Он использует ограниченный параллелизм и возвращает структурированные результаты. Замените заполнитель эндпоинтов на авторизованные прокси Nstdata эндпоинты.
import asyncio
import itertools
import httpx
URLS =["https://example.com/page/1","https://example.com/page/2",]PROXIES =["http://USER:PASS@gate-1.example:8000","http://USER:PASS@gate-2.example:8000",]asyncdeffetch(client, url, semaphore):asyncwith semaphore:try: r =await client.get(url) r.raise_for_status()return{"url": url,"status": r.status_code,"bytes":len(r.content)}except httpx.HTTPError as exc:return{"url": url,"error":type(exc).__name__}asyncdefmain(): semaphore = asyncio.Semaphore(8) clients =[ httpx.AsyncClient(proxy=p, timeout=20, follow_redirects=True)for p in PROXIES
]try: tasks =[ fetch(client, url, semaphore)for url, client inzip(URLS, itertools.cycle(clients))]print(await asyncio.gather(*tasks))finally:await asyncio.gather(*(client.aclose()for client in clients))asyncio.run(main())
Повторяйте ошибки соединения, тайм-ауты, 429 и выбранные ответы 5xx с экспоненциальной задержкой и дрожанием. Не повторяйте сбои аутентификации или каждый 4xx. Ограничьте количество попыток и записывайте эндпоинт прокси, целевой хост, задержку, статус и окончательный результат, не записывая учетные данные.
Липкие сессии работают лучше для многозапросных потоков, которые зависят от куки. Ротация работает лучше для независимых запросов, когда это разрешено. Изменение прокси на каждом запросе может разрушить повторное использование подключений и усложнить диагностику.
Общие ошибки
407 Proxy Authentication Required: неверные учетные данные или формат эндпоинта.
Ошибки TLS: проверьте сертификаты; не отключайте проверку как общее решение.
429: уменьшите параллелизм и соблюдайте Retry-After.
Повторные страницы вызова: остановитесь и подтвердите правила доступа, а не эскалируйте уклонение.
Высокая задержка с асинхронностью: лимит параллелизма слишком высок или upstream перегружен.
Окончательный вердикт
Надежный шаблон прокси HTTPX — это повторно используемый AsyncClient, явные тайм-ауты, ограниченный параллелизм, структурированные ошибки и осторожные повторные попытки. Используйте эндпоинты прокси Nstdata, когда местоположение или маршрутизация сессий являются реальным требованием, и измеряйте полезные ответы, а не общий объем запросов.
Попробуйте Nstdata — начните бесплатный пробный период сегодня
Да, с дополнительной зависимостью SOCKS. Следуйте текущей документации по установке и прокси HTTPX.
Должен ли один AsyncClient использоваться разными задачами?
Да, когда эти задачи разделяют конфигурацию и жизненный цикл. Повторное использование клиента позволяет использовать пул соединений.
Сколько одновременно запросов я должен отправить?
Начните с низких значений и увеличивайте только в пределах разрешенной скорости целевого объема и вашего измеренного бюджета ошибок.
Lena Zhou
Sep. 18th 2026
Более 110 млн реальных IP с успешностью доступа 99,9%
Среднее время ответа ~0,5 с для задач с высокой параллельностью
Всего от $0.1/GB
Получите мгновенный доступ к премиальным пулам резидентных, серверных, IPv6- и ISP-прокси.