Dê a uma requisição proxy do Twisted um prazo para o corpo
Combine o tempo limite de conexão do endpoint do proxy com um prazo Deferred que também cubra a leitura de um corpo de resposta pequeno.
Um ProxyAgent pode conectar-se rapidamente e depois esperar indefinidamente por um corpo de resposta. O tempo limite de conexão do seu endpoint proxy não descreve essa espera posterior.
Defina um limite de conexão no endpoint ao construir o agente. Para a requisição HTTP pública abaixo, um candidato não autenticado da lista de proxies HTTP pode substituir o endereço se intermediários públicos forem permitidos:
endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
Para uma resposta pequena que pretende recolher na memória, inclua a leitura do corpo na cadeia Deferred antes de acrescentar 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 trecho pressupõe que a aplicação já tem o seu reactor e um agente configurado. O Deferred da requisição do ProxyAgent devolve um objeto de resposta; o readBody devolve o Deferred do corpo. Devolvê-lo a partir do callback faz a cadeia esperar também por essa operação.
A colocação importa. O Twisted aplica addTimeout ao trabalho representado pelos callbacks instalados antes dele. Acrescentar um leitor de corpo depois descreveria outro limite. Nesta disposição, o temporizador começa quando addTimeout é chamado e cobre a requisição pendente e o trabalho do corpo nessa cadeia.
Use um consumidor em fluxo para corpos grandes ou ilimitados e represente a sua conclusão da mesma forma. Um prazo do lado do cliente limita quanto tempo a sua aplicação espera; não reconfigura o tempo limite de conexão do próprio proxy para a origem.