Dalle a unha petición proxy de Twisted un prazo para o seu corpo
Combina o tempo de espera de conexión do punto final do proxy cun prazo Deferred que tamén cubra a lectura dun corpo de resposta pequeno.
Un ProxyAgent pode conectarse rápido e despois agardar indefinidamente un corpo de resposta. O tempo de espera de conexión do seu punto final proxy non describe esa espera posterior.
Establece un límite de conexión no punto final ao construír o axente. Para a petición HTTP pública de abaixo, un candidato non autenticado da lista de proxies HTTP pode substituír o enderezo se se permiten intermediarios públicos:
endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
Para unha resposta pequena que pretenderás recoller en memoria, inclúe a lectura do corpo na cadea Deferred antes de engadir o prazo:
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()))
O fragmento supón que a aplicación xa ten o seu reactor e un axente configurado. O Deferred da petición de ProxyAgent entrega un obxecto de resposta; readBody devolve o Deferred do corpo. Devolvelo desde o callback fai que a cadea espere tamén esa operación.
A colocación importa. Twisted aplica addTimeout ao traballo que representan os callbacks instalados antes. Engadir un lector de corpo despois describiría outro límite. Nesta disposición o temporizador comeza cando se chama addTimeout e cobre a petición pendente e o traballo do corpo nesa cadea.
Usa un consumidor en fluxo para corpos grandes ou ilimitados e representa a súa finalización do mesmo xeito. Un prazo do lado do cliente limita canto espera a túa aplicación; non reconfigura o tempo de espera de conexión do propio proxy cara á orixe.