Дайте на заявка през Twisted прокси краен срок за тялото ѝ
Съчетайте таймаута за връзка на прокси крайната точка със срок на Deferred, който покрива и четенето на малко тяло на отговор.
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 и покрива чакащата заявка и работата с тялото във веригата.
Използвайте поточен консуматор за големи или неограничени тела и представяйте завършването му по същия начин. Крайният срок от страна на клиента ограничава колко дълго чака приложението ви; той не пренастройва собствения таймаут за връзка на проксито нагоре по веригата.