인증 없는 HTTP 프록시로 비동기 요청 한 번을 보내려면 session.get()에 경로를 지정하세요. 필요하면 프로젝트에 aiohttp를 추가하세요.

uv add aiohttp

아래 문서용 주소를 자신의 HTTP 수신 엔드포인트나 HTTP 프록시 목록의 후보로 바꾸세요. HTTPS 목적지로의 CONNECT를 허용해야 합니다. SOCKS 전용 엔드포인트에는 이 proxy 인수 대신 적절한 커넥터가 필요합니다.

import asyncio
import aiohttp

async def main():
    timeout = aiohttp.ClientTimeout(total=15, connect=5)
    async with aiohttp.ClientSession(
        timeout=timeout,
        trust_env=False,
    ) as session:
        async with session.get(
            "https://example.com/",
            proxy="http://203.0.113.10:8080",
        ) as response:
            print(response.status)
            print((await response.text())[:200])

asyncio.run(main())

요청은 HTTP 상태와 응답 텍스트의 처음 200자를 출력합니다. 여기서는 403이나 429도 확인 가능한 응답으로 남습니다. 앱이 실패 상태를 예외로 바꿔야 한다면 response.raise_for_status()를 호출하세요. 비동기 컨텍스트 관리자는 블록이 끝나면 세션과 응답을 닫으며 예외가 발생해도 마찬가지입니다.

15초의 total 한도는 요청 작업을 포함합니다. 5초의 connect 한도에는 풀에서 사용 가능한 연결을 기다리는 시간도 포함되므로 풀이 바쁘면 새 소켓을 열기도 전에 한도를 소진할 수 있습니다. 단일 호출을 동시 검사로 바꿀 때 중요한 차이입니다.

trust_env=False는 예제의 경로를 명시적으로 유지합니다. aiohttp는 기본적으로 프록시 환경 변수를 찾지 않습니다. 다른 터미널에서 변수를 내보내도 이 호출은 설정되지 않습니다. 프로세스가 상속받은 환경이 의도한 라우팅 정책일 때만 trust_env=True를 선택하세요.

관련 글