Một GET qua proxy có thể đến máy chủ rồi theo các chuyển hướng cho đến khi thất bại cuối cùng che khuất phản hồi đầu tiên. Hãy phơi bày phản hồi ban đầu đó để chẩn đoán:

request = scrapy.Request(
    'https://service.example/page',
    callback=inspect_redirect,
    meta={
        'proxy': 'http://proxy.example:8080',
        'dont_redirect': True,
        'handle_httpstatus_list': [301, 302, 303, 307, 308],
    },
)

Lên lịch yêu cầu này qua luồng start hoặc callback hiện có của spider. Đối với một lần kiểm tra trang công khai được phép, danh sách proxy HTTP cung cấp các ứng viên cho URL proxy của yêu cầu. inspect_redirect nên ghi lại trạng thái phản hồi và tiêu đề Location thay vì mù quáng theo nó lần nữa.

dont_redirect dừng chuyển hướng tự động cho yêu cầu này. handle_httpstatus_list cho phép các trạng thái được nêu tên đến được callback thay vì bị lọc lỗi HTTP từ chối. Các cài đặt này liên quan đến những trách nhiệm khác nhau của middleware.

Kiểm tra xem chuyển hướng chọn gì: một URL chuẩn dự định, một lược đồ hoặc tên máy chủ khác, một trang đăng nhập, hay một chu kỳ lặp lại. Một 302 nhận được sau khi truyền tải thành công là một quan sát khác với việc không mở được kết nối proxy.

Khi việc xử lý chuyển hướng bình thường được khôi phục, Scrapy phơi bày redirect_urls và redirect_reasons trong siêu dữ liệu yêu cầu của phản hồi. Chúng có thể giữ lại đường đi đến kết quả cuối cùng mà không để chuyển hướng bị tắt suốt toàn bộ lần thu thập.

Phản hồi cuối cùng không tự động là trang mà ứng dụng dự định. Giữ đích đến và nội dung phản hồi cùng với chẩn đoán định tuyến.

Bài viết liên quan