http://proxy.example:8080 같은 일반적인 프록시 값은 URL입니다. Twisted의 clientFromString은 tcp:host=proxy.example:port=8080 같은 엔드포인트 설명을 받습니다. 두 문자열은 서로 다른 문법으로 관련 정보를 설명합니다.

애플리케이션이 일반적인 HTTP 프록시 URL을 받는다면 엔드포인트를 만들기 전에 구문 분석하세요:

import os
from urllib.parse import urlsplit
from twisted.internet.endpoints import HostnameEndpoint
from twisted.web.client import ProxyAgent

proxy = urlsplit(os.environ['http_proxy'])
if proxy.scheme != 'http' or not proxy.hostname:
    raise ValueError('Expected an HTTP proxy URL')
port = proxy.port if proxy.port is not None else 80
endpoint = HostnameEndpoint(reactor, proxy.hostname, port, timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)

이 코드 조각은 애플리케이션에 이미 reactor가 있다고 가정합니다. 포트가 HTTP URL의 기본값이 아닐 때는 구성에서 실제 프록시 포트를 지정하세요. HTTP 프록시 목록은 프록시 계정 없이 허용된 공개 HTTP 요청을 위한 엔드포인트 후보를 제공합니다. HostnameEndpoint는 호스트 이름을 또 다른 콜론 구분 구성 문자열에 넣는 것도 피합니다.

이것은 라우팅 입력만 변환합니다. URL에 포함된 자격 증명은 호스트와 포트가 구문 분석되었다는 이유만으로 권한 부여 헤더가 되지 않습니다. 필요한 지원 프록시 인증은 요청의 인증 방식으로 제공하세요. 일반 HTTP 대상과 Basic을 제공하는 중개자라면 ProxyAgent의 Basic 요청 헤더가 그러한 방식 중 하나를 제공합니다.

HTTPS 프록시 URL은 프록시에 대한 TLS 지원 연결이 필요합니다. SOCKS URL은 SOCKS 협상이 필요합니다. 두 가지 모두 해당 체계를 일반 HTTP ProxyAgent 엔드포인트 변환으로 보내는 것으로는 구현되지 않습니다.

관련 글