获取代理 返回格式:{'http': 'http://ip:port', 'https': 'http://ip:port'}
(self)
| 210 | self.logger = Logger() |
| 211 | |
| 212 | def get_proxy(self) -> Optional[Dict[str, str]]: |
| 213 | """获取代理 |
| 214 | 返回格式:{'http': 'http://ip:port', 'https': 'http://ip:port'} |
| 215 | """ |
| 216 | try: |
| 217 | if not self.api_url: |
| 218 | print('⚠️ 未配置代理API地址,将不使用代理') |
| 219 | return None |
| 220 | |
| 221 | response = requests.get(self.api_url, timeout=10) |
| 222 | if response.status_code == 200: |
| 223 | proxy_text = response.text.strip() |
| 224 | if ':' in proxy_text: |
| 225 | # 构建代理URL |
| 226 | if proxy_text.startswith('http://') or proxy_text.startswith('https://'): |
| 227 | proxy = proxy_text |
| 228 | else: |
| 229 | proxy = f'http://{proxy_text}' |
| 230 | |
| 231 | # 隐藏认证信息用于显示(如果有的话) |
| 232 | display_proxy = proxy |
| 233 | if '@' in proxy: |
| 234 | # 格式: http://user:pass@ip:port |
| 235 | parts = proxy.split('@') |
| 236 | if len(parts) == 2: |
| 237 | display_proxy = f"http://***:***@{parts[1]}" |
| 238 | |
| 239 | print(f"✅ 成功获取代理: {display_proxy}") |
| 240 | return {'http': proxy, 'https': proxy} |
| 241 | |
| 242 | print(f'❌ 获取代理失败: {response.text}') |
| 243 | return None |
| 244 | except Exception as e: |
| 245 | print(f'❌ 获取代理异常: {str(e)}') |
| 246 | return None |
| 247 | |
| 248 | |
| 249 | # ==================== HTTP客户端 ==================== |