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

Postavite ograničenje veze na endpointu kada gradite agenta. Za javni HTTP zahtev ispod, neautentifikovani kandidat sa liste HTTP proxyja može zameniti adresu ako su javni posrednici dozvoljeni:

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

Za mali odgovor koji nameravate da prikupite u memoriji, uključite čitanje tela u Deferred lanac pre 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()))

Isečak pretpostavlja da aplikacija već ima svoj reactor i konfigurisanog agenta. Deferred zahteva ProxyAgenta vraća objekat odgovora; readBody vraća Deferred za telo. Vraćanjem iz callback-a lanac čeka i tu operaciju.

Položaj je važan. Twisted primenjuje addTimeout na rad koji predstavljaju callback-ovi instalirani pre njega. Dodavanje čitača tela posle opisalo bi drugu granicu. U ovom rasporedu tajmer počinje kada se pozove addTimeout i pokriva zahtev na čekanju i rad sa telom u tom lancu.

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

Povezani članci