Spaces:
Build error
Build error
# ./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 |