projectdiscovery / httpx

httpx is a fast and multi-purpose HTTP toolkit that allows running multiple probes using the retryablehttp library.
https://docs.projectdiscovery.io/tools/httpx
MIT License
7.75k stars 843 forks source link

Random httpx.ConnectError #1850

Closed psykokwak-com closed 3 months ago

psykokwak-com commented 3 months ago

httpx version:

0.27.0

Current Behavior:

Having random "httpx.ConnectError" Just have to retry again to make it work (or not) I tried with curl and browser (chrome) and it works every time.

Expected Behavior:

Connection should work

Steps To Reproduce:

import httpx
import asyncio

async def fetch(url):
    async with httpx.AsyncClient() as client:
        response = await client.get(url)
        return response

async def main():
    url = "https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe"  # Replace with your target URL
    response = await fetch(url)

    print("Status Code:", response.status_code)
    print("Response Body:", response.text)

asyncio.run(main())

Anything else:

When it works :

DEBUG [2024-08-02 13:52:27] asyncio - Using proactor: IocpProactor DEBUG [2024-08-02 13:52:27] httpx - load_ssl_context verify=True cert=None trust_env=True http2=False DEBUG [2024-08-02 13:52:27] httpx - load_verify_locations cafile='C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\certifi\cacert.pem' DEBUG [2024-08-02 13:52:27] httpcore.connection - connect_tcp.started host='api.telegram.org' port=443 local_address=None timeout=5.0 socket_options=None DEBUG [2024-08-02 13:52:27] httpcore.connection - connect_tcp.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x000002E13E3FB460> DEBUG [2024-08-02 13:52:27] httpcore.connection - start_tls.started ssl_context=<ssl.SSLContext object at 0x000002E13E41CFC0> server_hostname='api.telegram.org' timeout=5.0 DEBUG [2024-08-02 13:52:27] httpcore.connection - start_tls.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x000002E13E4780D0> DEBUG [2024-08-02 13:52:27] httpcore.http11 - send_request_headers.started request=<Request [b'GET']> DEBUG [2024-08-02 13:52:27] httpcore.http11 - send_request_headers.complete DEBUG [2024-08-02 13:52:27] httpcore.http11 - send_request_body.started request=<Request [b'GET']> DEBUG [2024-08-02 13:52:27] httpcore.http11 - send_request_body.complete DEBUG [2024-08-02 13:52:27] httpcore.http11 - receive_response_headers.started request=<Request [b'GET']> DEBUG [2024-08-02 13:52:27] httpcore.http11 - receive_response_headers.complete return_value=(b'HTTP/1.1', 401, b'Unauthorized', [(b'Server', b'nginx/1.18.0'), (b'Date', b'Fri, 02 Aug 2024 11:52:27 GMT'), (b'Content-Type', b'application/json'), (b'Content-Length', b'58'), (b'Connection', b'keep-alive'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Access-Control-Allow-Origin', b'*'), (b'Access-Control-Expose-Headers', b'Content-Length,Content-Type,Date,Server,Connection')]) INFO [2024-08-02 13:52:27] httpx - HTTP Request: GET https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe "HTTP/1.1 401 Unauthorized" DEBUG [2024-08-02 13:52:27] httpcore.http11 - receive_response_body.started request=<Request [b'GET']> DEBUG [2024-08-02 13:52:27] httpcore.http11 - receive_response_body.complete DEBUG [2024-08-02 13:52:27] httpcore.http11 - response_closed.started DEBUG [2024-08-02 13:52:27] httpcore.http11 - response_closed.complete DEBUG [2024-08-02 13:52:27] httpcore.connection - close.started DEBUG [2024-08-02 13:52:27] httpcore.connection - close.complete Status Code: 401 Response Body: {"ok":false,"error_code":401,"description":"Unauthorized"}

When it does not work :

DEBUG [2024-08-02 13:49:43] asyncio - Using proactor: IocpProactor DEBUG [2024-08-02 13:49:43] httpx - load_ssl_context verify=True cert=None trust_env=True http2=False DEBUG [2024-08-02 13:49:43] httpx - load_verify_locations cafile='C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\certifi\cacert.pem' DEBUG [2024-08-02 13:49:43] httpcore.connection - connect_tcp.started host='api.telegram.org' port=443 local_address=None timeout=5.0 socket_options=None DEBUG [2024-08-02 13:49:43] httpcore.connection - connect_tcp.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x00000216EC62F400> DEBUG [2024-08-02 13:49:43] httpcore.connection - start_tls.started ssl_context=<ssl.SSLContext object at 0x00000216EC64CFC0> server_hostname='api.telegram.org' timeout=5.0 DEBUG [2024-08-02 13:49:43] httpcore.connection - start_tls.failed exception=ConnectError(BrokenResourceError()) Traceback (most recent call last): File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpx_transports\default.py", line 69, in map_httpcore_exceptions yield File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpx_transports\default.py", line 373, in handle_async_request resp = await self._pool.handle_async_request(req) File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpcore_async\connection_pool.py", line 216, in handle_async_request raise exc from None File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpcore_async\connection_pool.py", line 196, in handle_async_request response = await connection.handle_async_request( File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpcore_async\connection.py", line 99, in handle_async_request raise exc File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpcore_async\connection.py", line 76, in handle_async_request stream = await self._connect(request) File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpcore_async\connection.py", line 154, in _connect stream = await stream.start_tls(**kwargs) File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpcore_backends\anyio.py", line 66, in start_tls with map_exceptions(exc_map): File "C:\Users\Jyce\AppData\Local\Programs\Python\Python310\lib\contextlib.py", line 153, in exit self.gen.throw(typ, value, traceback) File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpcore_exceptions.py", line 14, in map_exceptions raise to_exc(exc) from exc httpcore.ConnectError

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "C:\Users\Jyce\Desktop\MyProject\llama_test.py", line 443, in asyncio.run(main()) File "C:\Users\Jyce\AppData\Local\Programs\Python\Python310\lib\asyncio\runners.py", line 44, in run return loop.run_until_complete(main) File "C:\Users\Jyce\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 646, in run_until_complete return future.result() File "C:\Users\Jyce\Desktop\MyProject\llama_test.py", line 437, in main response = await fetch(url) File "C:\Users\Jyce\Desktop\MyProject\llama_test.py", line 432, in fetch response = await client.get(url) File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpx_client.py", line 1801, in get return await self.request( File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpx_client.py", line 1574, in request return await self.send(request, auth=auth, follow_redirects=follow_redirects) File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpx_client.py", line 1661, in send response = await self._send_handling_auth( File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpx_client.py", line 1689, in _send_handling_auth response = await self._send_handling_redirects( File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpx_client.py", line 1726, in _send_handling_redirects response = await self._send_single_request(request) File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpx_client.py", line 1763, in _send_single_request response = await transport.handle_async_request(request) File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpx_transports\default.py", line 372, in handle_async_request with map_httpcore_exceptions(): File "C:\Users\Jyce\AppData\Local\Programs\Python\Python310\lib\contextlib.py", line 153, in exit self.gen.throw(typ, value, traceback) File "C:\Users\Jyce\Desktop\MyProject\venv\lib\site-packages\httpx_transports\default.py", line 86, in map_httpcore_exceptions raise mapped_exc(message) from exc httpx.ConnectError

dogancanbakir commented 3 months ago

I guess you're having an issue with https://www.python-httpx.org/ instead of this tool. Closing this; feel free to reopen if that's not the case.