测试动态代理 API
(request: DynamicProxySettings)
| 264 | |
| 265 | @router.post("/proxy/dynamic/test") |
| 266 | async def test_dynamic_proxy(request: DynamicProxySettings): |
| 267 | """测试动态代理 API""" |
| 268 | from ...core.dynamic_proxy import fetch_dynamic_proxy |
| 269 | |
| 270 | if not request.api_url: |
| 271 | raise HTTPException(status_code=400, detail="请填写动态代理 API 地址") |
| 272 | |
| 273 | # 若未传入 api_key,使用已保存的 |
| 274 | api_key = request.api_key or "" |
| 275 | if not api_key: |
| 276 | settings = get_settings() |
| 277 | if settings.proxy_dynamic_api_key: |
| 278 | api_key = settings.proxy_dynamic_api_key.get_secret_value() |
| 279 | |
| 280 | proxy_url = fetch_dynamic_proxy( |
| 281 | api_url=request.api_url, |
| 282 | api_key=api_key, |
| 283 | api_key_header=request.api_key_header, |
| 284 | result_field=request.result_field, |
| 285 | ) |
| 286 | |
| 287 | if not proxy_url: |
| 288 | return {"success": False, "message": "动态代理 API 返回为空或请求失败"} |
| 289 | |
| 290 | # 用获取到的代理测试连通性 |
| 291 | import time |
| 292 | from curl_cffi import requests as cffi_requests |
| 293 | try: |
| 294 | proxies = {"http": proxy_url, "https": proxy_url} |
| 295 | start = time.time() |
| 296 | resp = cffi_requests.get( |
| 297 | "https://api.ipify.org?format=json", |
| 298 | proxies=proxies, |
| 299 | timeout=10, |
| 300 | impersonate="chrome110" |
| 301 | ) |
| 302 | elapsed = round((time.time() - start) * 1000) |
| 303 | if resp.status_code == 200: |
| 304 | ip = resp.json().get("ip", "") |
| 305 | return {"success": True, "proxy_url": proxy_url, "ip": ip, "response_time": elapsed, |
| 306 | "message": f"动态代理可用,出口 IP: {ip},响应时间: {elapsed}ms"} |
| 307 | return {"success": False, "proxy_url": proxy_url, "message": f"代理连接失败: HTTP {resp.status_code}"} |
| 308 | except Exception as e: |
| 309 | return {"success": False, "proxy_url": proxy_url, "message": f"代理连接失败: {e}"} |
| 310 | |
| 311 | |
| 312 | @router.get("/registration") |
nothing calls this directly
no test coverage detected