# backend/app/proxy_manager.py import os import requests # requests는 FreeProxy 테스트나 ScrapingBee API 직접 호출 시 유용 from loguru import logger from dotenv import load_dotenv # .env 파일에서 환경 변수 로드 load_dotenv() # ScrapingBee API 키 (Proxy Mode를 사용한다면 필요 없을 수 있음) SCRAPINGBEE_API_KEY = os.getenv("SCRAPINGBEE_API_KEY") # ScrapingBee Proxy Mode 주소 (대시보드에서 확인한 실제 프록시 서버 주소) SCRAPINGBEE_PROXY_ADDRESS = os.getenv("SCRAPINGBEE_PROXY_ADDRESS") # FreeProxy 라이브러리 (필요하다면 주석 해제) # from fp.fp import FreeProxy # import asyncio # FreeProxy가 비동기로 동작한다면 필요 async def get_proxy_url() -> str | None: """ 현재 설정된 프록시 제공자로부터 프록시 URL을 가져옵니다. 나중에 다른 프록시 제공자로 변경 시 이 함수 내부만 수정하면 됩니다. """ # ---------------------------------------------------- # ScrapingBee Proxy Mode 사용 예시 (추천) # ScrapingBee 대시보드에서 얻은 프록시 주소를 사용합니다. # .env 파일에 SCRAPINGBEE_PROXY_ADDRESS="us.scrapingbee.com:8880" 형태로 설정 if SCRAPINGBEE_PROXY_ADDRESS: logger.info(f"ScrapingBee Proxy Mode 프록시 사용 시도: {SCRAPINGBEE_PROXY_ADDRESS}") return SCRAPINGBEE_PROXY_ADDRESS # ---------------------------------------------------- # ---------------------------------------------------- # FreeProxy 사용 예시 (폴백 또는 다른 선택지) # 위에서 ScrapingBee 프록시를 찾지 못했거나 사용하지 않으려는 경우 # 주석을 해제하고 FreeProxy를 사용하도록 설정할 수 있습니다. # try: # logger.info("FreeProxy를 사용하여 무료 프록시 가져오기 시도...") # # Hugging Face Spaces 허용 포트 (80, 443, 8080)만 필터링 # proxy_address = FreeProxy(timeout=1, port=[80, 443, 8080], https=True, rand=True).get() # if proxy_address: # logger.info(f"FreeProxy 사용: {proxy_address}") # return proxy_address # else: # logger.warning("사용 가능한 FreeProxy를 찾을 수 없습니다.") # except Exception as e: # logger.warning(f"FreeProxy 가져오기 실패: {e}") # ---------------------------------------------------- # 어떤 프록시도 설정되지 않았거나 가져오지 못한 경우 logger.warning("어떤 유효한 프록시도 구성되거나 가져올 수 없습니다. 프록시 없이 진행합니다.") return None