Suteikite Twisted proxy užklausai jos turinio terminą
Sujunkite proxy galinio taško prisijungimo laiko limitą su Deferred terminu, kuris apima ir mažo atsakymo turinio skaitymą.
ProxyAgent gali greitai prisijungti ir tada neribotai laukti atsakymo turinio. Jo proxy galinio taško prisijungimo laiko limitas neaprašo to vėlesnio laukimo.
Kurdami agentą, nustatykite prisijungimo ribą galiniame taške. Toliau pateiktai viešai HTTP užklausai neautentifikuotas kandidatas iš HTTP proxy sąrašo gali pakeisti adresą, jei vieši tarpininkai leidžiami:
endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
Mažam atsakymui, kurį ketinate surinkti atmintyje, įtraukite turinio skaitymą į Deferred grandinę prieš pridėdami terminą:
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()))
Šis fragmentas daro prielaidą, kad programa jau turi savo reactor ir sukonfigūruotą agentą. ProxyAgent užklausos Deferred grąžina atsakymo objektą; readBody grąžina turinio Deferred. Grąžinus jį iš callback, grandinė laukia ir šios operacijos.
Vieta svarbi. Twisted taiko addTimeout darbui, kurį atstovauja prieš tai įdiegti callback. Pridėjus turinio skaitytuvą vėliau, būtų aprašyta kita riba. Šioje tvarkoje laikmatis pradedamas kviečiant addTimeout ir apima laukiančią užklausą bei turinio darbą toje grandinėje.
Dideliems ar neribotiems turiniams naudokite srautinį vartotoją ir jo užbaigimą pavaizduokite taip pat. Kliento pusės terminas riboja, kiek ilgai jūsų programa laukia; jis neperkonfigūruoja paties proxy aukštesnės krypties prisijungimo laiko limito.