proxy 사용 질문
261
작성한 질문수 2
안녕하세요.
사내에서 강의를 듣다보니 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.textcoroutine-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 인턴입니다.
문의하신 내용에 대해, 파이썬에서 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 설정을 할 수 있도록 자체 함수나 클래스를 구현하여 중복을 줄이고, 프록시 설정 변경이 필요할 때 쉽게 업데이트할 수 있는 구조를 만드는 것이 좋습니다.
항상 프록시 서버의 주소나 포트가 바뀔 수 있다는 점을 고려하여 설정값을 관리하는 것도 중요합니다. 환경 변수 또는 외부 설정 파일을 통해 프록시 설정을 관리하면, 코드 변경 없이도 프록시 설정을 업데이트할 수 있어 유연성이 증가합니다.
대규모 크롤링 시 동시 요청 수 제어 방법
0
94
2
AWS LighSail 접근 불가
0
134
1
강의상의 readme와 배포되어 있는 것이 다른 것 같아요
0
96
1
book_scraper.py 에서 import get_secret 관련 질문
0
100
1
ThreadPoolExecutor 중간에 멈추는 법
0
291
1
몽고Db 기초 질문
0
195
1
async await 문법 질문
0
237
1
멀티 스레딩 질문..
0
193
1
교안 제공은 안되나요?
0
227
1
TypeError: field Config is defined without type annotation
0
258
1
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
0
1709
1
jinja2templates
0
244
1
몽고DB 설정 관련 질문
0
242
1
비동기 함수를 동기적인 실행으로 만드는 부분 질문입니다
1
308
2
AWS Lightsail SSL handshake failed 오류 문의드립니다.
0
491
1
동시성과 병렬성
0
326
1
python select linter ? 오류
1
739
2
수업질문
1
352
1
response 객체에서 키값으로 조회 시 KeyError 발생
0
568
1
from config import get_secret 질문
0
386
1
파이썬 코루틴활용 영상 질문
0
279
1
가상환경 설정 질문
0
316
1
pydantic import error
0
1225
2
동시성 프로그래밍으로 이미지 다운로더 개발
0
311
1





