ProxyAgent สามารถเชื่อมต่อได้อย่างรวดเร็วแล้วรอเนื้อหาคำตอบอย่างไม่มีกำหนด เวลาเชื่อมต่อของปลายทาง proxy ไม่ได้อธิบายการรอในภายหลังนั้น

กำหนดขอบเขตการเชื่อมต่อที่ปลายทางเมื่อสร้างเอเจนต์ สำหรับคำขอ HTTP สาธารณะด้านล่าง ผู้สมัครที่ไม่ผ่านการตรวจสอบจากรายการ proxy 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 และครอบคลุมคำขอที่ค้างอยู่และงานเกี่ยวกับเนื้อหาในห่วงโซ่นั้น

ใช้ผู้บริโภคแบบสตรีมสำหรับเนื้อหาขนาดใหญ่หรือไม่จำกัด และแสดงการเสร็จสิ้นในลักษณะเดียวกัน เส้นตายฝั่งไคลเอนต์จำกัดระยะเวลาที่แอปพลิเคชันของคุณรอ มันไม่ได้กำหนดค่าคอนเนกชันไทม์เอาต์ต้นทางของ proxy ใหม่

บทความที่เกี่ยวข้อง