Gee ’n Twisted-proxyversoek ’n sperdatum vir sy liggaam
Kombineer die proxy-eindpunt se verbindingstydperk met ’n Deferred-sperdatum wat ook die lees van ’n klein antwoordliggaam dek.
’n ProxyAgent kan vinnig verbind en dan onbepaald op ’n antwoordliggaam wag. Die verbindingstydperk van sy proxy-eindpunt beskryf nie daardie latere wag nie.
Stel ’n verbindingsgrens op die eindpunt wanneer jy die agent bou. Vir die publieke HTTP-versoek hieronder kan ’n ongeverifieerde kandidaat uit die HTTP-proxylys die adres vervang indien publieke tussengangers toegelaat word:
endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
Vir ’n klein antwoord wat jy in die geheue wil versamel, sluit liggaamlees in die Deferred-ketting in voordat jy die sperdatum byvoeg:
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()))
Die fragment veronderstel dat die toepassing reeds sy reactor en gekonfigureerde agent het. ProxyAgent se versoek-Deferred lewer ’n antwoordobjek; readBody gee die Deferred vir die liggaam terug. As jy dit uit die callback terugstuur, wag die ketting ook op daardie bewerking.
Plaasing maak saak. Twisted pas addTimeout toe op die werk wat deur callbacks voorgestel word wat voor dit geïnstalleer is. Om daarna ’n liggaamleser by te voeg, sou ’n ander grens beskryf. In hierdie rangskikking begin die tydhouer wanneer addTimeout geroep word en dek dit die hangende versoek en liggaamswerk in daardie ketting.
Gebruik ’n stromende verbruiker vir groot of onbegrensde liggame en stel die voltooiing daarvan op dieselfde manier voor. ’n Kliëntkant-sperdatum beperk hoe lank jou toepassing wag; dit herkonfigureer nie die proxy se eie opstroom-verbindingstydperk nie.