ການປ່ຽນ response.request.meta ປ່ຽນວັດຖຸ Python. ເພື່ອດາວໂຫຼດອີກ ຕ້ອງໃຫ້ Request ອື່ນແກ່ Scrapy ເພື່ອກຳນົດເວລາ.

ສຳລັບ GET ທີ່ callback ຂອງທ່ານຕັດສິນຢ່າງຊັດເຈນວ່າຈະລອງຄືນໃໝ່, ຕົວຊ່ວຍລອງຄືນໃໝ່ສາທາລະນະຂອງ Scrapy ສາມາດຮັກສາການນັບການລອງຄືນໃໝ່ກັບຄຳຮ້ອງໃໝ່:

from scrapy.downloadermiddlewares.retry import get_retry_request

def retry_through(self, response, proxy_url):
    retry = get_retry_request(
        response.request,
        spider=self,
        reason='choose_another_proxy',
    )
    if retry is None:
        return None
    retry.meta['proxy'] = proxy_url
    retry.headers.pop('Proxy-Authorization', None)
    return retry

ນີ້ແມ່ນຕົວຊ່ວຍ spider. ຜູ້ເອີ້ນຕ້ອງສົ່ງຄືນ ຫຼື yield Request ທີ່ໄດ້ມາເມື່ອມີ. None ໝາຍຄວາມວ່າຕົວຊ່ວຍໄດ້ປະຕິເສດການລອງຄືນໃໝ່ອີກພາຍໃນຂີດຈຳກັດທີ່ໃຊ້.

ຕົວຊ່ວຍລອງຄືນໃໝ່ຄັດລອກຄຳຮ້ອງ, ອັບເດດຈຳນວນການລອງຄືນໃໝ່ ແລະ ໃຫ້ພຶດຕິກຳຂອງຕົວກຳນົດເວລາທີ່ເໝາະສຳລັບການລອງຄືນໃໝ່. ການ yield URL ດຽວກັນເປັນຄຳຮ້ອງໃໝ່ທຳມະດາ ອາດຈະພົບການກັ່ນຕອງຂໍ້ມູນຊ້ຳແທນ.

ໃຊ້ URL proxy ທີ່ HttpProxyMiddleware ທີ່ເປີດໃຊ້ຮອງຮັບ. ສຳລັບການລອງຄືນໃໝ່ຂອງຄຳຮ້ອງ GET ສາທາລະນະທີ່ອະນຸຍາດ, ຜູ້ສະໝັກ HTTP ທີ່ບໍ່ມີການພິສູດຕົວຕົນຈາກ ລາຍຊື່ proxy HTTP ສາມາດໃຫ້ proxy_url. ການລຶບຊ່ອງ proxy-authorization ທີ່ເຄີຍຕິດຕັ້ງໄວ້ກ່ອນ ປ້ອງກັນການນຳຫົວຂໍ້ຂອງຕົວກາງເກົ່າເຂົ້າມາໃນການເລືອກນີ້; ໃຫ້ middleware ດຶງບັນຊີໃໝ່ຈາກ URL proxy ໃໝ່ເມື່ອເໝາະສົມ.

ແຍກການເລືອກລະດັບ callback ນີ້ອອກຈາກການຈັດການອັດຕະໂນມັດຂອງ RetryMiddleware ສຳລັບຄວາມລົ້ມເຫຼວທີ່ຕັ້ງຄ່າໄວ້. ຕັດສິນວ່າຊັ້ນໃດເປັນເຈົ້າຂອງການລອງຄືນໃໝ່ ເພື່ອບໍ່ໃຫ້ການດຳເນີນການໃຊ້ງົບສອງອັນທີ່ເປັນເອກະລາດ. ຕົວຢ່າງແມ່ນກ່ຽວກັບວຽກ GET ທີ່ຫຼິ້ນຄືນໄດ້ ບໍ່ແມ່ນຄຳສັນຍາວ່າການເຮັດທຸລະກຳທີ່ສົ່ງແລ້ວຊ້ຳຈະປອດໄພ.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ