x
This commit is contained in:
38
services/proxy_pool.py
Normal file
38
services/proxy_pool.py
Normal file
@@ -0,0 +1,38 @@
|
||||
from typing import List
|
||||
|
||||
from core.config import Config
|
||||
from core.exceptions import ProxyFetchError
|
||||
|
||||
from .fetch_manager import FetchManager
|
||||
|
||||
|
||||
class ProxyPool:
|
||||
def __init__(self, config: Config, fetch_manager: FetchManager):
|
||||
self.config = config
|
||||
self.fetch_manager = fetch_manager
|
||||
|
||||
async def batch_get(self, num: int) -> List[str]:
|
||||
"""获取num个代理"""
|
||||
# 临时代理
|
||||
return ['http://127.0.0.1:3057'] * num
|
||||
|
||||
try:
|
||||
response = await self.fetch_manager.request(
|
||||
'GET',
|
||||
self.config.proxy_config.api_url.format(num=num)
|
||||
)
|
||||
|
||||
if 'error' in response:
|
||||
raise ProxyFetchError(response['error'])
|
||||
|
||||
# 这里需要根据实际的代理API返回格式进行解析
|
||||
proxies = self._parse_proxies(response['body'])
|
||||
return proxies[:num]
|
||||
|
||||
except Exception as e:
|
||||
raise ProxyFetchError(f"Failed to fetch proxies: {str(e)}")
|
||||
|
||||
def _parse_proxies(self, response_body: str) -> List[str]:
|
||||
"""解析代理API返回的数据"""
|
||||
# 需要根据实际API返回格式实现
|
||||
...
|
||||
Reference in New Issue
Block a user