File size: 2,648 Bytes
eda02a7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 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