Un ProxyAgent puede conectarse rápido y luego esperar indefinidamente un cuerpo de respuesta. El tiempo de espera de conexión de su punto final proxy no describe esa espera posterior.

Establece un límite de conexión en el punto final al construir el agente. Para la petición HTTP pública de abajo, un candidato no autenticado de la lista de proxies HTTP puede sustituir la dirección si se permiten intermediarios públicos:

endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
                              timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)

Para una respuesta pequeña que pretendas recoger en memoria, incluye la lectura del cuerpo en la cadena Deferred antes de añadir su plazo:

from twisted.web.client import readBody

d = agent.request(b'GET', b'http://example.com/')
d.addCallback(readBody)
d.addTimeout(10, reactor)
d.addCallback(lambda body: print(len(body)))
d.addErrback(lambda failure: print(failure.getErrorMessage()))

El fragmento supone que la aplicación ya tiene su reactor y un agente configurado. El Deferred de la petición de ProxyAgent entrega un objeto de respuesta; readBody devuelve el Deferred del cuerpo. Devolverlo desde el callback hace que la cadena espere también esa operación.

La colocación importa. Twisted aplica addTimeout al trabajo que representan los callbacks instalados antes. Añadir un lector de cuerpo después describiría otro límite. Con esta disposición, el temporizador empieza cuando se llama a addTimeout y cubre la petición pendiente y el trabajo del cuerpo en esa cadena.

Usa un consumidor en flujo para cuerpos grandes o ilimitados y representa su finalización del mismo modo. Un plazo del lado del cliente limita cuánto espera tu aplicación; no reconfigura el tiempo de espera de conexión del propio proxy hacia el origen.

Artículos relacionados