En ProxyAgent kan ansluta snabbt och sedan vänta obegränsat på en svarskropp. Dess proxy-endpunkts anslutningstimeout beskriver inte den senare väntan.

Sätt en anslutningsgräns på endpunkten när du bygger agenten. För den offentliga HTTP-begäran nedan kan en oautentiserad kandidat från HTTP-proxylistan ersätta adressen om offentliga mellanhänder tillåts:

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

För ett litet svar som du tänker samla i minnet, ta med läsning av kroppen i Deferred-kedjan innan du lägger till deadlinen:

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()))

Utdraget förutsätter att applikationen redan har sin reactor och en konfigurerad agent. ProxyAgents request-Deferred ger ett svarsobjekt; readBody returnerar Deferred för kroppen. Returneras det från callbacken väntar kedjan även på den operationen.

Placeringen spelar roll. Twisted tillämpar addTimeout på arbetet som callbacks installerade före den representerar. Att lägga till en kroppsläsare efteråt skulle beskriva en annan gräns. I den här ordningen startar timern när addTimeout anropas och täcker den väntande begäran och kroppsarbetet i den kedjan.

Använd en streamingkonsument för stora eller obegränsade kroppar och representera dess slutförande på samma sätt. En deadline på klientsidan begränsar hur länge din applikation väntar; den omkonfigurerar inte proxyns egen anslutningstimeout uppströms.

Relaterade artiklar