ProxyAgent se može brzo povezati, a zatim neograničeno čekati tijelo odgovora. Vremensko ograničenje veze njegova proxy endpointa ne opisuje to kasnije čekanje.

Postavite ograničenje veze na endpointu kad gradite agenta. Za javni HTTP zahtjev ispod, neautentificirani kandidat s liste HTTP proxyja može zamijeniti adresu ako su javni posrednici dopušteni:

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

Za mali odgovor koji namjeravate prikupiti u memoriji, uključite čitanje tijela u Deferred lanac prije dodavanja roka:

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

Isječak pretpostavlja da aplikacija već ima svoj reactor i konfigurirani agent. Deferred zahtjeva ProxyAgenta vraća objekt odgovora; readBody vraća Deferred za tijelo. Vraćanjem iz callbacka lanac čeka i tu operaciju.

Položaj je važan. Twisted primjenjuje addTimeout na rad koji predstavljaju callbackovi instalirani prije njega. Dodavanje čitača tijela poslije opisalo bi drugu granicu. U ovom rasporedu mjerač počinje kad se pozove addTimeout i pokriva zahtjev na čekanju i rad s tijelom u tom lancu.

Koristite streaming potrošač za velika ili neograničena tijela i predstavite njegov završetak na isti način. Rok na strani klijenta ograničava koliko dugo vaša aplikacija čeka; on ne rekonfigurira vlastito vremensko ograničenje veze proxyja prema uzvodno.

Povezani članci