Dați cererii proxy Twisted un termen pentru corpul ei
Combinați timpul limită de conectare al punctului final proxy cu un termen Deferred care acoperă și citirea unui corp de răspuns mic.
Un ProxyAgent se poate conecta rapid și apoi poate aștepta nelimitat un corp de răspuns. Timpul limită de conectare al punctului său final proxy nu descrie acea așteptare ulterioară.
Stabiliți o limită de conectare pe punctul final când construiți agentul. Pentru cererea HTTP publică de mai jos, un candidat neautentificat din lista de proxy HTTP poate înlocui adresa dacă intermediarii publici sunt permisi:
endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
Pentru un răspuns mic pe care intenționați să îl colectați în memorie, includeți citirea corpului în lanțul Deferred înainte de a adăuga termenul:
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()))
Fragmentul presupune că aplicația are deja reactorul și un agent configurat. Deferred-ul cererii ProxyAgent returnează un obiect de răspuns; readBody returnează Deferred-ul corpului. Returnarea lui din callback face lanțul să aștepte și acea operațiune.
Amplasarea contează. Twisted aplică addTimeout lucrării reprezentate de callback-urile instalate înaintea ei. Adăugarea unui cititor de corp după aceea ar descrie altă limită. În această aranjare, cronometrul pornește când este apelat addTimeout și acoperă cererea în așteptare și lucrul pe corp din acel lanț.
Folosiți un consumator în flux pentru corpuri mari sau nelimitate și reprezentați finalizarea lui în același mod. Un termen pe partea clientului limitează cât așteaptă aplicația dvs.; nu reconfigura timpul limită de conectare upstream al proxy-ului însuși.