ProxyAgent може да се свърже бързо и след това да чака неограничено време за тяло на отговор. Таймаутът за връзка на прокси крайната точка не описва това по-късно чакане.

Задайте ограничение за връзката на крайната точка, когато създавате агента. За публичната HTTP заявка по-долу неудостоверен кандидат от списъка с HTTP прокси може да замени адреса, ако публичните посредници са разрешени:

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

За малък отговор, който възнамерявате да съберете в паметта, включете четенето на тялото във веригата Deferred, преди да добавите крайния срок:

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

Фрагментът предполага, че приложението вече има своя reactor и конфигуриран агент. Deferred на заявката на ProxyAgent връща обект на отговор; readBody връща Deferred за тялото. Връщането му от callback кара веригата да изчака и тази операция.

Мястото има значение. Twisted прилага addTimeout към работата, представена от callback-ите, инсталирани преди него. Добавянето на четец на тяло след това би описало друга граница. При тази подредба таймерът започва при извикване на addTimeout и покрива чакащата заявка и работата с тялото във веригата.

Използвайте поточен консуматор за големи или неограничени тела и представяйте завършването му по същия начин. Крайният срок от страна на клиента ограничава колко дълго чака приложението ви; той не пренастройва собствения таймаут за връзка на проксито нагоре по веригата.

Подобни статии