Όταν εξετάζετε την επιλεγμένη διαδρομή, χρησιμοποιήστε το Request που συνδέεται με την ολοκληρωμένη απόκριση. Κρατήστε τρεις παρατηρήσεις χωριστά:

ΠεδίοΣημασία
response.request.meta.get('proxy')Το επιλεγμένο proxy URL αυτού του αιτήματος, όταν υπάρχει
response.ip_addressΔιεύθυνση που παρέχεται από τον handler λήψης, ενδέχεται None
Αναφορά πηγής από αξιόπιστο προορισμόΗ δημόσια πηγή που παρατηρήθηκε εκεί

Μέσα σε ένα callback, παραλείψτε από τα routine διαγνωστικά τα τμήματα του URL που φέρουν διαπιστευτήρια:

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

Στον handler HTTP/1.1 του Scrapy 2.13.3 η διεύθυνση προέρχεται από τον ομότιμο της σύνδεσης της απόκρισης, όχι από υπηρεσία IP εξόδου. Ορισμένες διαδρομές, όπως οι αποκρίσεις μηδενικού μήκους, μπορεί να την αφήσουν None. Άλλοι handlers μπορεί να την συμπληρώσουν διαφορετικά. Το None από μόνο του δεν αποδεικνύει άμεση δρομολόγηση.

Για έλεγχο εξόδου, ρωτήστε ένα αξιόπιστο endpoint υπό την προβλεπόμενη πολιτική proxy και κρατήστε την ταυτότητα του αιτήματος μαζί με την παρατήρηση. Το περιστρεφόμενο middleware μπορεί να δώσει σε μεταγενέστερο έλεγχο άλλο endpoint.

Οι ανακατευθύνσεις δημιουργούν επίσης άλλο αίτημα. Τα τελικά μεταδεδομένα περιγράφουν εκείνο το στάδιο· εξετάστε το ιστορικό ανακατεύθυνσης και οποιαδήποτε νέα επιλογή από middleware αντί να το θεωρήσετε απόδειξη της διαδρομής του πρώτου URL.

Σχετικά άρθρα