Semasa memeriksa laluan yang dipilih, gunakan Request yang terikat pada respons yang selesai. Kekalkan tiga pemerhatian secara berasingan:

MedanMaksud
response.request.meta.get('proxy')URL proksi yang dipilih untuk permintaan ini, jika ada
response.ip_addressAlamat yang diberikan oleh pengendali muat turun, mungkin None
Laporan sumber daripada destinasi yang dipercayaiSumber awam yang diperhatikan di sana

Di dalam callback, tinggalkan bahagian URL yang membawa kelayakan daripada diagnostik rutin:

from urllib.parse import urlsplit

proxy = response.request.meta.get('proxy')
proxy_host = urlsplit(proxy).hostname if proxy else None
self.logger.info(
    'target_host=%s proxy_host=%s peer_ip=%s',
    urlsplit(response.url).hostname, proxy_host, response.ip_address,
)

Dalam pengendali HTTP/1.1 Scrapy 2.13.3, alamat datang daripada rakan sambungan respons, bukan daripada perkhidmatan IP keluar. Sesetengah laluan, termasuk respons panjang sifar, boleh membiarkannya None. Pengendali lain boleh mengisinya secara berbeza. None sendiri tidak membuktikan penghalaan terus.

Untuk pemeriksaan keluar, tanya titik akhir yang dipercayai di bawah dasar proksi yang dimaksudkan dan simpan identiti permintaan bersama pemerhatian. Middleware berputar boleh memberikan titik akhir lain kepada pemeriksaan kemudian.

Ubah hala juga mencipta permintaan lain. Metadata akhir menerangkan peringkat itu; semak sejarah ubah hala dan sebarang pemilihan semula oleh middleware dan bukannya menganggapnya bukti laluan URL pertama.

Artikel berkaitan