ProxyAgent dapat terhubung dengan cepat lalu menunggu bodi respons tanpa batas. Batas waktu koneksi endpoint proxy-nya tidak menggambarkan penantian berikutnya itu.

Tetapkan batas koneksi pada endpoint saat membangun agen. Untuk permintaan HTTP publik di bawah, kandidat tanpa autentikasi dari daftar proxy HTTP dapat menggantikan alamat jika perantara publik diizinkan:

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

Untuk respons kecil yang ingin Anda kumpulkan di memori, sertakan pembacaan bodi dalam rantai Deferred sebelum menambahkan tenggatnya:

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

Cuplikan ini mengasumsikan aplikasi sudah memiliki reactor dan agen yang dikonfigurasi. Deferred permintaan ProxyAgent menghasilkan objek respons; readBody mengembalikan Deferred untuk bodi. Mengembalikannya dari callback membuat rantai juga menunggu operasi itu.

Penempatan penting. Twisted menerapkan addTimeout pada pekerjaan yang diwakili callback yang dipasang sebelumnya. Menambahkan pembaca bodi sesudahnya akan menggambarkan batas yang berbeda. Dalam susunan ini timer mulai saat addTimeout dipanggil dan mencakup permintaan yang tertunda serta pekerjaan bodi dalam rantai tersebut.

Gunakan konsumen streaming untuk bodi besar atau tak terbatas dan nyatakan penyelesaiannya dengan cara yang sama. Tenggat di sisi klien membatasi berapa lama aplikasi Anda menunggu; itu tidak mengonfigurasi ulang batas waktu koneksi hulu milik proxy itu sendiri.

Artikel terkait