Random httpx.ConnectError

Aperta
#836 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
25/100
Tipo di issue
Bug
Chiarezza
Da chiarire
Stato di attività
Tranquilla
Stack tecnologico
python
Ambito
networking

Direzione di ricerca

Inizia dall'esempio che fallisce e confronta i relativi log di successo e di fallimento, quindi segui il percorso segnalato attraverso httpx/_transports/default.py, httpcore/_async/connection.py e httpcore/_backends/anyio.py. Riproduci il problema TLS intermittente e determina una causa specifica e riproducibile prima di definire una correzione e la copertura di regressione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Originally opened by @psykokwak-com on 2024-08-02 12:01:05 in encode/httpx

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

Lingua principale
Python
Stelle
1.6k
Fork
103
Merge medio
1g 19h
PR unite (30g)
25

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di pydantic/httpx2

Tutte le issue di pydantic/httpx2

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.