AIOHTTP에서 프록시 설정 방법

이 단계별 가이드에서 AIOHTTP에 프록시를 설정하는 방법을 알아보세요
2 분 읽기
How to Set Proxy in AIOHTTP

이 AIOHTTP 프록시 통합 가이드를 마치면 다음을 알게 됩니다:

  • AIOHTTP가 무엇인지.
  • 프록시를 사용해야 하는 이유.
  • AIOHTTP에서 HTTP, HTTPS 또는 SOCKS 프록시를 설정하는 방법.
  • 프록시 인증, SSL 인증서 오류, IP 로테이션 등을 처리하는 방법.

AIOHTTP란 무엇인가요?

AIOHTTP는 인기 있는 오픈 소스 Python 비동기 HTTP 클라이언트/서버 프레임워크입니다. 주요 기능은 다음과 같습니다:

  • HTTP 프로토콜의 클라이언트 및 서버 측 모두 지원.
  • 클라이언트 및 서버 웹 소켓 지원.
  • 미들웨어와 플러그인 가능한 라우팅을 제공하는 웹 서버.

이 튜토리얼에서 중요한 것은 asyncio를 기반으로 HTTP 요청을 수행하는 HTTP 클라이언트 역할을 할 수 있는 능력입니다. AIOHTTP는 특히 여러 동시 요청을 효율적으로 처리해야 하는 스크립트 구축에 매우 적합합니다.

현재 AIOHTTP는 GitHub에서 14,000개 이상의 스타를 보유하고 있습니다.

AIOHTTP 프록시가 필요한 이유는 무엇일까요?

AIOHTTP에서 프록시를 사용하는 좋은 이유는 온라인 신원을 보호하기 위함입니다. 요청을 프록시 서버로 라우팅함으로써 IP와 위치를 숨길 수 있으며, 대상 사이트는 요청이 사용자가 아닌 프록시 서버에서 온 것으로 인식합니다. 이는 사용자를 식별하고 추적하기가 더 어려워져 온라인 활동에 기밀성을 더하고 IP 차단 및 지역 제한을 피할 수 있음을 의미합니다.

당사의 요청 프록시 통합 튜토리얼에서 다루었듯이, 요청을 통해 동일한 결과를 달성할 수 있다는 점을 참고하십시오.

AIOHTTP 프록시에서 프록시 설정하기

이 단계별 섹션에서는 AIOHTTP에서 HTTP, HTTPS 또는 SOCKS 프록시를 설정하는 방법을 배웁니다.

AIOHTTP 필수 조건

여기서는 사용자의 컴퓨터에 Python이 이미 설치되어 있고 가상 환경이 설정된 Python 프로젝트가 준비되어 있다고 가정합니다. 다음 명령어로 AIOHTTP와 권장 종속성을 설치하세요:

  pip install aiohttp[speedups]

이렇게 하면 aiohttp가 프로젝트의 종속성에 추가됩니다.

Python 스크립트 파일을 열고 aiohttp 임포트를 추가하세요:

  import aiohttp

aiohttp가 async/await 구문과 함께 작동하도록 하려면 asyncio를 사용해야 합니다. 따라서 해당 라이브러리도 임포트하고 기본적인 async main() 함수를 설정하세요:

  nimport aiohttpnimport aiohttpnnimport asyncionnasync def main():n  # aiohttp logic...nnasyncio.run(main())

완벽합니다! 이제 AIOHTTP 프록시 통합 로직을 작성할 준비가 되었습니다!

프록시 필수 조건

AIOHTTP에 프록시를 통합하는 방법을 살펴보기 전에, 프록시 URL의 형식을 이해해야 합니다.

AIOHTTP에서 프록시 서버에 연결하는 데 필요한 URL 형식은 다음과 같습니다:

  u003cPROTOCOLu003e://[u003cUSERNAMEu003e:u003cPASSWORDu003e@]u003cHOSTu003e[:u003cPORTu003e]

자세히 설명하면 다음과 같습니다:

  • : HTTP 프록시의 경우 http, HTTPS 프록시의 경우 https, 그리고 SOCKS 프로토콜을 사용하는 프록시의 경우 socks, socks4 또는 socks5입니다.
  • : 프록시 서버의 IP 주소 또는 전체 도메인(예: proxydomain.com).
  • <포트>: 프록시 서버가 수신 대기하는 포트 번호입니다.
  • <USERNAME>: 프록시 연결 인증을 위한 선택적 사용자 이름.
  • <PASSWORD>: 프록시 연결 인증을 위한 선택적 비밀번호.

URL에서<PROTOCOL><HOST> 만이 필수 요소입니다. <PORT> 는 선택 사항이지만 일반적으로 지정해야 합니다. 마지막으로, 인증 프록시를 사용할 때만 <USERNAME>:<PASSWORD> 자격 증명 섹션이 필요합니다.

프록시 서버 URL이 없다면 온라인에서 무료로 얻을 수 있습니다. 동시에 무료 프록시는 신뢰할 수 없고, 데이터를 많이 소모하며, 일관성이 없고, 오류가 발생하기 쉬우며, 신뢰할 수 없다는 점을 명심하세요 . 학습 목적으로만 사용할 수 있습니다. 실제 운영 환경에서는 Bright Data와 같은 최고 수준의 공급업체에서 제공하는 신뢰할 수 있는 프리미엄 프록시가 필요합니다.

본 문서 후반부에서는 Bright Data 프록시를 획득하고 AIOHTTP에서 사용하는 방법을 확인할 수 있습니다.

HTTP 프록시 통합

문서에 명시된 바와 같이, AIOHTTP는 HTTP 프록시 통합을 지원합니다. HTTP 프록시의 URL이 다음과 같다고 가정해 보겠습니다:

  http://190.6.23.219:999

아래와 같이 proxy 옵션을 사용하여 AIOHTTP 요청에 지정할 수 있습니다:

  nasync with aiohttp.ClientSession() as session:n    async with session.get(n        'https://example.com',n        proxy='http://190.6.23.219:999'n    ) as response:n        print(response.status)

이제 AIOHTTP는 get() 함수에 proxy 인자로 전달된 프록시 URL을 통해 GET 요청을 라우팅합니다.

HTTP 및 HTTPS 트래픽 모두에 HTTP 프록시를 사용할 수 있다는 점을 기억하세요.

HTTPS 프록시 통합

HTTPS 프록시의 경우 상황이 조금 더 복잡해집니다. AIOHTTP 문서에 명시된 바와 같이:

“Python 3.10에서는 asyncio가 사용하는 전송 계층에서 TLS-in-TLS 지원이 비활성화되었습니다. 향후 Python 버전(예: v3.11)에서 특정 속성이 변경되면 자동으로 지원됩니다.

aiohttp v3.8 이상은 이에 대비하여 TLS-in-TLS를 지원하는 코드를 갖추고 있으므로, HTTPS 프록시 터널을 통해 HTTPS 요청을 전송할 수 있습니다.”

다시 말해, AIOHTTP에서 HTTPS 프록시를 사용하려면 Python을 3.11 버전으로, aiohttp를 v3.8 이상으로 업그레이드해야 합니다. HTTPS AIOHTTP 프록시 통합 방식은 위에서 본 것과 동일합니다. 유일하게 변경되는 점은 프록시 프로토콜이 http가 아닌 https로 바뀐다는 것입니다.

SOCKS 프록시 통합

AIOHTTP는 기본적으로 SOCKS 프록시를 지원하지 않습니다. AIOHTTP에서 SOCKS 프록시를 사용해야 하는 경우 aiohtpp-socks를 설치해야 합니다:

  pip install aiohttp_socks

이 라이브러리는 python-socks를 사용하여 AIOHTTP에 SOCKS4(a) 및 SOCKS5(h) 지원을 확장합니다.

다음과 같이 SOCKS 프록시의 URL을 설정하세요:

  socks5://98.175.31.195:4145

AIOHTTP에서 다음과 같이 사용하십시오:

  n# initialize a SOCKS proxy connectornconnector = ProxyConnector.from_url('socks5://98.175.31.195:4145')nn# initialize an AIOHTTP client with the SOCKS proxy connectornasync with aiohttp.ClientSession(connector=connector) as session:n    async with session.get('https://example.com') as response:n        print(response.status)

이제 AIOHTTP는 지정된 SOCKS 프록시를 통해 GET 요청을 라우팅합니다.

ProxyConnector는 aiohttp-socks에서 제공되므로 다음으로 반드시 임포트하세요:

  from aiohttp_socks import ProxyConnector

내부적으로 aiohttp-socks는 요청을 조정하여 지정된 SOCKS 프록시를 통과하도록 하는 AIOHTTP 커넥터를정의합니다.

완전한 예시

이제 AIOHTTP에서 프록시를 사용하는 방법을 배웠습니다. 완전한 예제를 통해 위 접근법이 작동하는지 확인해 보겠습니다!

간단함을 위해 HTTP 프록시를 사용하겠지만, 아래 예제는 HTTPS 및 SOCKS로 쉽게 적용할 수 있습니다.

GET 요청의 대상 URL은 HTTPBin 프로젝트의 /ip 엔드포인트입니다. 이 API는 들어오는 요청의 IP를 반환합니다. 따라서 프록시 통합이 성공하면 엔드포인트는 사용자의 IP가 아닌 프록시 서버의 IP로 응답해야 합니다.

다시 한번, 다음이 여러분의 HTTP 프록시 서버 URL이라고 가정합니다:

  http://190.6.23.219:999

AIOHTTP에 이를 통합하고 다음 명령어로 https://httpbin.io/ip 엔드포인트가 반환한 데이터를 출력하세요:

  nimport aiohttpnimport asyncionnasync def main():n    async with aiohttp.ClientSession() as session:n        # perform a GET request through an HTTP proxyn        async with session.get(n          'https://httpbin.io/ip',n          proxy='http://190.6.23.219:999'n        ) as response:n            # extract the response data and print itn            json = await response.json()n            print(json)nnasyncio.run(main())

이 스크립트를 실행하면 다음과 같은 결과가 출력됩니다:

  n{n  'origin': '190.6.23.219'n}

자, 이제 확인되었습니다! 바로 프록시 서버의 IP 주소입니다. 이는 AIOHTTP 프록시 통합이 완벽하게 작동함을 의미합니다.

참고: 프록시 서버는 수명이 짧습니다. 이 튜토리얼을 읽는 시점에는 선택한 프록시가 더 이상 작동하지 않아 위 스크립트가 실패할 수 있습니다. 작동시키려면 HTTP 프록시를 새로 작동하는 것으로 교체하세요.

AIOHTTP 프록시: 고급 사용 사례

AIOHTTP 프록시 통합의 기본은 알았지만, 더 복잡한 기술은 어떨까요? 이 섹션에서 자세히 알아보세요!

환경 변수를 통한 글로벌 프록시

AIOHTTP는 사용할 프록시를 결정하는 두 가지 방법을 지원합니다:

  1. proxy 인자에 전달된 프록시 URL을 사용합니다.
  2. trust_env가 True로 설정된 경우, HTTP_PROXYHTTPS_PROXY 환경 변수를 읽습니다.

따라서 아래 환경 변수를 설정하여 AIOHTTP에서 전역적으로 프록시를 구성할 수 있습니다:

  • HTTP_PROXY: HTTP 요청에 사용할 프록시 서버의 URL.
  • HTTPS_PROXY: HTTPS 요청에 사용할 프록시 서버의 URL입니다.

예를 들어, Linux 또는 macOS에서 다음 명령으로 설정합니다:

  nexport HTTP_PROXY=u0022u003cPROTOCOLu003e://[u003cUSERNAMEu003e:u003cPASSWORDu003e@]u003cHOSTu003e[:u003cPORTu003e]u0022nexport HTTPS_PROXY=u0022u003cPROTOCOLu003e://[u003cUSERNAMEu003e:u003cPASSWORDu003e@]u003cHOSTu003e[:u003cPORTu003e]u0022

다음으로 aiohttp.ClientSession()trust_env=True를 전달합니다:

  async with aiohttp.ClientSession(trust_env=True) as session:

이제 session.get()프록시 인자 없이 호출할 수 있습니다.

  nasync with aiohttp.ClientSession(trust_env=True) as session:n    async with session.get('https://example.com') as response:n        print(response.status)

훌륭합니다! AIOHTTP는 각 HTTP 및 HTTPS 요청에 대해 환경 변수에 지정된 프록시를 사용합니다.

동일한 메커니즘이 cURL의 프록시에서도 작동하므로 자세한 내용은 링크를 참조하세요.

프록시 인증 방식

올바른 자격 증명이 없는 상태에서 인증된 프록시에 연결을 시도하면 407 프록시 인증 필요 오류가 발생합니다.

인증된 HTTP 프록시에 연결할 URL이 아래 문자열이라고 가정해 보겠습니다:

  http://admin:[email protected]:8928

여기서 기본 프록시 URL은 다음과 같습니다:

  http://20.198.112.312:892

인증 자격 증명은 다음과 같습니다:

  • 사용자 이름: admin
  • 비밀번호: pK5ip98NWp56l9sjy

AIOHTTP는 인증된 프록시를 처리하는 두 가지 방식을 지원합니다:

  1. 프록시 URL에 직접 자격 증명을 지정하는 방법:
  nasync with session.get(n  'https://example.com/',n  proxy='http://admin:[email protected]:8928'n) as response:

2. aiohttp.BasicAuth() 객체에 사용자명과 비밀번호 자격 증명을 전달한 후 proxy_auth 옵션에서 사용:

  nproxy_auth = aiohttp.BasicAuth('admin', 'pK5ip98NWp56l9sjy')nasync with session.get(n    'https://example.com/',n    proxy=u0022http://20.198.112.312:892u0022,n    proxy_auth=proxy_authn) as response:

대단합니다! AIOHTTP 프록시 인증은 더 이상 비밀이 아닙니다.

SSL 인증서 오류 방지

AIOHTTP에서 프록시를 설정할 때 다음과 같은 오류로 인해 요청이 실패할 수 있습니다:

  ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain 

이러한 SSL 인증서 문제를 방지하려면 ssl=False로 SSL 검증을 비활성화하세요:

  nasync with aiohttp.ClientSession() as session:n    async with session.get(n      'https://example.com',n      proxy='http://190.6.23.219:999',n      ssl=False # turn of SSL certificate verificationn    ) as response:n        print(response.status)

AIOHTTP SSL 인증서 검증 오류가 즉시 사라집니다.

AIOHTTP에서 프록시 순환 사용

동일한 프록시 서버를 반복적으로 사용할 경우 대상 사이트에서 해당 IP 주소를 차단할 가능성이 있습니다. 이를 방지하려면 요청 시 서로 다른 프록시 서버를 사용해야 합니다.

다음과 같이 설정할 수 있습니다:

  1. 여러 프록시 URL로 Python 리스트를 채웁니다.
  2. 각 요청 전에 프록시 URL을 무작위로 선택합니다.
  3. 선택된 프록시 URL을 AIOHTTP에 설정합니다.

이 방법의 주요 문제점은 반복적인 코드 작업이 필요하다는 점입니다. 또한 안정적인 프록시 서버 풀에 대한 접근이 필요하며, 이는 무료가 아닙니다. 다행히 Bright Data는 더 효과적인 솔루션을 제공합니다! 회전 프록시는 자동으로 출구 IP 주소를 변경해 주며, 195개국에서 이용 가능하고, 탁월한 네트워크 가동 시간을 자랑하며, 99.9%의 성공률을 보장합니다.

다음 장에서는 AIOHTTP에서 Bright Data의 로테이팅 프록시를 시작하는 방법을 배울 것입니다.

AIOHTTP와 Bright Data 프록시 통합

Bright Data는 포춘 500대 기업 및 20,000명 이상의 고객에게 서비스를 제공하는 세계 최고의 프록시 서버를 운영합니다. 글로벌 프록시 네트워크는 다음과 같습니다:

이는 세계에서 가장 크고 신뢰할 수 있는 프록시 네트워크 중 하나입니다!

아래 단계를 따라 AIOHTTP에서 Bright Data 프록시를 사용하는 방법을 알아보세요.

이미 계정이 있다면 Bright Data에 로그인하세요. 계정이 없다면 무료로 계정을 생성하세요. 다음 사용자 대시보드에 접근할 수 있습니다:

아래와 같이 “프록시 제품 보기” 버튼을 클릭하세요:

view proxy products

다음과 같은 “프록시 및 스크래핑 인프라” 페이지로 이동합니다:

아래로 스크롤하여 “주거용 프록시(Residential Proxies)” 카드를 찾은 후 “시작하기(Get started)” 버튼을 클릭하세요:

resi proxy

주거용 프록시 설정 대시보드로 이동합니다. 안내된 마법사를 따라 필요에 맞게 프록시 서비스를 설정하세요. 프록시 설정 방법에 대해 궁금한 점이 있으면 24시간 연중무휴 지원팀에 문의하세요.

“액세스 매개변수” 탭으로 이동하여 다음과 같이 프록시의 호스트, 포트, 사용자 이름, 비밀번호를 확인하세요:

access parameter

“호스트” 필드에는 이미 포트가 포함되어 있음을 유의하세요.

이 정보만 있으면 프록시 URL을 생성하여 AIOHTTP에서 사용할 수 있습니다. 모든 정보를 조합하여 다음 구문으로 URL을 생성하세요:

  u003cUsernameu003e:u003cPasswordu003e@u003cHostu003e

예를 들어, 이 경우 다음과 같습니다:

  brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX

“활성 프록시”를 켜고 마지막 지침을 따르시면 준비 완료입니다!

active proxy

Bright Data 통합용 AIOHTTP 프록시 스니펫은 다음과 같습니다:

  nimport aiohttpnimport asyncionnasync def main():n    async with aiohttp.ClientSession() as session:n        # perform a GET request through an HTTP proxyn        async with session.get(n          'https://lumtest.com/myip.json',n          proxy='http://brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX'n        ) as response:n            # extract the response data and print itn            json = await response.json()n            print(json)nnasyncio.run(main())

결론

이 AIOHTTP 프록시 통합 튜토리얼에서는 프록시를 사용해야 하는 이유와 aiohttp를 통해 설정하는 방법을 살펴보았습니다. 이제 인기 있는 Python HTTP 클라이언트 라이브러리인 AIOHTTP에서 HTTP, HTTPS 또는 SOCKS 프록시를 설정하는 방법을 알게 되었습니다. 여기서 입증된 바와 같이, 단 몇 줄의 코드만으로 가능합니다!

이 가이드를 통해 무료 프록시 서비스를 절대 사용해서는 안 되는 이유도 이해하셨을 것입니다. 대신 신뢰할 수 있는 프록시 서비스 제공업체의 안정적인 프록시 서버를 채택해야 합니다. 시장에서 최고의 제공업체는? 바로 Bright Data입니다! AIOHTTP에서의 프록시 통합 절차는 동일하지만, 프리미엄 프록시의 이점은 끝이 없습니다.