• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

proxy 사용 질문

24.03.20 16:36 작성 조회수 86

0

안녕하세요.

사내에서 강의를 듣다보니 proxy를 타도록 되어 있습니다.

basic-fetcher에서는 아래 두가지 방식이 모두 동작하는데요.

os.environ["HTTP_PROXY"] = "http://xxx..."
os.environ["HTTPS_PROXY"] = "http://xxx..."
os.environ["PYTHONHTTPSVERIFY"] = "0"
def fetcher(session, url):
    with session.get(url, proxies=proxies, verify=False) as respose:
        return respose.text

coroutine-fetcher 에서는 ClientSession()에서 두가지 모두 오류가 납니다.

1번

async def fetcher(session, url):
    async with session.get(url, proxies=proxies, verify=False) as respose:
        return await respose.text()

async def main():
    urls = ["https://naver.com", "https://google.com", "https://instagram.com"]

    async with aiohttp.ClientSession() as session:
        result = await fetcher(session, urls[0])
        print(result)

2번

async def fetcher(session, url):
    async with session.get(url, verify=False) as respose:
        return await respose.text()

async def main():
    urls = ["https://naver.com", "https://google.com", "https://instagram.com"]

    async with aiohttp.ClientSession() as session:
        result = await fetcher(session, urls[0])
        print(result)

 

해결방법과 함께 proxy 환경에서는 프록시 정보를 어떤 구조로 가지고 있어야 효율적일지 문의드립니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.22

안녕하세요, 인프런 AI 인턴입니다.

문의하신 내용에 대해, 파이썬에서 proxy를 사용하는 경우와 aiohttp 라이브러리를 사용하는 경우에는 다소 차이가 있습니다. os.environ을 통한 환경 변수 설정은 파이썬 전역에서 HTTP 요청을 보낼 때 기본적으로 적용되는 설정입니다. 그러나 aiohttp.ClientSession을 사용할 때는 ClientSession 객체에 직접 proxy 설정을 해주어야 합니다.

aiohttp에서 proxy를 사용하려면 proxy 매개변수에 proxy 주소를 전달해야 합니다. 다음은 aiohttp를 이용하여 proxy를 설정하는 방법입니다.

import aiohttp

async def fetcher(session, url, proxy):
    async with session.get(url, proxy=proxy) as response:
        return await response.text()

async def main():
    proxy_url = "http://your_proxy_address:port"
    urls = ["https://naver.com", "https://google.com", "https://instagram.com"]

    async with aiohttp.ClientSession() as session:
        for url in urls:
            result = await fetcher(session, url, proxy_url)
            print(result)

# 이 예제에서는 asyncio 루프를 실행해야 합니다.
# 예: asyncio.run(main())

위 코드에서는 fetcher 함수에 proxy라는 새 매개변수를 추가하여, session.get 메소드 호출 시 proxy 매개변수를 통해 proxy URL을 전달합니다. 이와 같이 aiohttp에서는 proxy 매개변수를 사용하여 요청마다 개별적으로 proxy를 설정할 수 있습니다.

프록시 환경에서 효율적인 구조를 위해서는, 프록시 설정이 필요한 모든 HTTP 요청에 대해 일관되게 proxy 설정을 할 수 있도록 자체 함수나 클래스를 구현하여 중복을 줄이고, 프록시 설정 변경이 필요할 때 쉽게 업데이트할 수 있는 구조를 만드는 것이 좋습니다.

항상 프록시 서버의 주소나 포트가 바뀔 수 있다는 점을 고려하여 설정값을 관리하는 것도 중요합니다. 환경 변수 또는 외부 설정 파일을 통해 프록시 설정을 관리하면, 코드 변경 없이도 프록시 설정을 업데이트할 수 있어 유연성이 증가합니다.