Test proxy connectivity.
(request: ProxyTestRequest)
| 92 | |
| 93 | @router.post("/test") |
| 94 | async def test_proxy_connectivity(request: ProxyTestRequest) -> JSONResponse: |
| 95 | """Test proxy connectivity.""" |
| 96 | import httpx |
| 97 | |
| 98 | proxy_addr = request.address.strip() |
| 99 | test_url = request.test_url |
| 100 | |
| 101 | if not proxy_addr: |
| 102 | return JSONResponse( |
| 103 | content=ProxyTestResult( |
| 104 | success=False, message="Proxy address cannot be empty" |
| 105 | ).model_dump(), |
| 106 | status_code=400, |
| 107 | ) |
| 108 | |
| 109 | try: |
| 110 | start_time = time.monotonic() |
| 111 | async with httpx.AsyncClient( |
| 112 | proxy=proxy_addr, |
| 113 | timeout=15.0, |
| 114 | follow_redirects=True, |
| 115 | ) as client: |
| 116 | response = await client.get(test_url) |
| 117 | latency = (time.monotonic() - start_time) * 1000 |
| 118 | |
| 119 | if 200 <= response.status_code < 300: |
| 120 | return JSONResponse( |
| 121 | content=ProxyTestResult( |
| 122 | success=True, |
| 123 | message=f"Connection successful (HTTP {response.status_code})", |
| 124 | latency_ms=round(latency, 2), |
| 125 | ).model_dump() |
| 126 | ) |
| 127 | else: |
| 128 | return JSONResponse( |
| 129 | content=ProxyTestResult( |
| 130 | success=False, |
| 131 | message=f"HTTP Error: {response.status_code}", |
| 132 | latency_ms=round(latency, 2), |
| 133 | ).model_dump() |
| 134 | ) |
| 135 | |
| 136 | except httpx.ProxyError as e: |
| 137 | return JSONResponse( |
| 138 | content=ProxyTestResult( |
| 139 | success=False, message=f"Proxy error: {e}" |
| 140 | ).model_dump() |
| 141 | ) |
| 142 | except httpx.ConnectTimeout: |
| 143 | return JSONResponse( |
| 144 | content=ProxyTestResult( |
| 145 | success=False, message="Connection timeout" |
| 146 | ).model_dump() |
| 147 | ) |
| 148 | except httpx.ReadTimeout: |
| 149 | return JSONResponse( |
| 150 | content=ProxyTestResult(success=False, message="Read timeout").model_dump() |
| 151 | ) |
nothing calls this directly
no test coverage detected