Bir ProxyAgent hızla bağlanabilir ve ardından yanıt gövdesini süresiz bekleyebilir. Proxy uç noktasının bağlantı zaman aşımı bu sonraki beklemeyi tanımlamaz.

Aracıyı oluştururken uç noktada bir bağlantı sınırı belirleyin. Aşağıdaki genel HTTP isteği için, genel aracılara izin veriliyorsa HTTP proxy listesinden kimliği doğrulanmamış bir aday adresi değiştirebilir:

endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
                              timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)

Bellekte toplamayı düşündüğünüz küçük bir yanıt için, son tarihi eklemeden önce gövde okumayı Deferred zincirine dahil edin:

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()))

Parça, uygulamanın zaten kendi reactor'üne ve yapılandırılmış bir aracıya sahip olduğunu varsayar. ProxyAgent'ın istek Deferred'ı bir yanıt nesnesi verir; readBody gövdenin Deferred'ını döndürür. Bunu callback'ten döndürmek zincirin o işlemi de beklemesini sağlar.

Yerleşim önemlidir. Twisted addTimeout'u kendisinden önce kurulan callback'lerin temsil ettiği işe uygular. Sonradan bir gövde okuyucu eklemek farklı bir sınır tanımlar. Bu düzenlemede zamanlayıcı addTimeout çağrıldığında başlar ve o zincirdeki bekleyen isteği ve gövde işini kapsar.

Büyük veya sınırsız gövdeler için akışlı bir tüketici kullanın ve tamamlanmasını aynı şekilde temsil edin. İstemci tarafındaki son tarih uygulamanızın ne kadar beklediğini sınırlar; proxy'nin kendi üst akış bağlantı zaman aşımını yeniden yapılandırmaz.

İlgili makaleler