¿HTTPConnection.request no respeta el tiempo de espera?

Estoy tratando de usar HTTPConnection (2.7.8) para hacer una solicitud y he establecido el tiempo de espera en 10 con HTTPConnection(host, timeout=10) . Sin embargo, HTTPConnection.request() no parece HTTPConnection.request() después de 10 segundos. De hecho, HTTPConnection.timeout ni siquiera parece ser leído por HTTPConnection.request() (solo se lee por HTTPConnection.connect() . ¿Tengo entendido que es correcto? ¿El timeout solo es aplicable a connect() y no a request() ? ¿Hay una forma de request() tiempo de espera request() ?

Actualizar:

Creo que he reducido el problema aún más: si no proporciono el esquema, no respetará el tiempo de espera del socket. Si se proporcionó el esquema, es decir, la URL completa es http://google.com:22222 , entonces el tiempo de espera sería el correspondiente. Me pregunto por qué la presencia del esquema debería hacer una diferencia. Es decir, lo siguiente no respeta el tiempo de espera.

  socket.setdefaulttimeout(3) conn = HTTPConnection('google.com:22222') conn.timeout = 3 conn.request('GET', '') 

mientras que, esto hace:

  socket.setdefaulttimeout(3) conn = HTTPConnection('http://google.com:22222') conn.timeout = 3 conn.request('GET', '') 

Sin embargo, no le sucede a todos los dominios.

Gracias

Se tarda unos 30 segundos para que falle el siguiente código:

 #!/usr/bin/env python2 from httplib import HTTPConnection conn = HTTPConnection('google.com', 22222, timeout=2) conn.request('GET', '') 

Si se pasa ip a HTTPConnection lugar del nombre de host, el error de tiempo de espera se eleva en 2 segundos como se esperaba:

 #!/usr/bin/env python2 import socket from httplib import HTTPConnection host, port = 'google.com', 22222 ip, port = socket.getaddrinfo(host, port)[0][-1] conn = HTTPConnection(ip, port, timeout=2) conn.request('GET', '') 

La explicación es la misma que en ftplib. El tiempo de espera de FTP tiene un comportamiento inconsistente : el tiempo de espera puede limitar las operaciones de socket individuales, pero no dice nada sobre la duración de la llamada HTTPConnection() que puede probar varias direcciones IP devueltas por getaddrinfo() y el tiempo de espera. Limita solo las operaciones de socket individuales. Varias operaciones combinadas pueden tomar más tiempo.

Su HTTPConnection('http://google.com:22222') falla antes porque la url es un argumento incorrecto: debe ser host o host:port . La url absoluta se acepta mediante el método request() , aunque incluso allí tiene un significado especial, por lo general, solo se proporciona la ruta como '/' .