Nadaj żądaniu proxy Twisted termin dla jego treści
Połącz limit czasu połączenia punktu końcowego proxy z terminem Deferred, który obejmuje także odczyt małej treści odpowiedzi.
ProxyAgent może szybko się połączyć, a następnie czekać bez końca na treść odpowiedzi. Limit czasu połączenia jego punktu końcowego proxy nie opisuje tego późniejszego oczekiwania.
Przy budowie agenta ustaw limit połączenia w punkcie końcowym. Dla poniższego publicznego żądania HTTP nieuwierzytelniony kandydat z listy proxy HTTP może zastąpić adres, jeśli dozwolone są publiczne pośredniki:
endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
Dla małej odpowiedzi, którą zamierzasz zebrać w pamięci, dołącz odczyt treści do łańcucha Deferred przed dodaniem terminu:
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()))
Fragment zakłada, że aplikacja ma już swój reactor i skonfigurowanego agenta. Deferred żądania ProxyAgent zwraca obiekt odpowiedzi; readBody zwraca Deferred treści. Zwrócenie go z callbacku sprawia, że łańcuch czeka również na tę operację.
Umiejscowienie ma znaczenie. Twisted stosuje addTimeout do pracy reprezentowanej przez callbacki zainstalowane wcześniej. Dodanie czytnika treści później opisywałoby inną granicę. W tym układzie licznik zaczyna się przy wywołaniu addTimeout i obejmuje oczekujące żądanie oraz pracę z treścią w tym łańcuchu.
Dla dużych lub nieograniczonych treści użyj konsumenta strumieniowego i przedstaw jego zakończenie w ten sam sposób. Termin po stronie klienta ogranicza, jak długo czeka Twoja aplikacja; nie zmienia on własnego limitu czasu połączenia proxy z serwerem źródłowym.