Ang pagbabago ng response.request.meta ay nagbabago ng isang Python object. Para gumawa ng isa pang download, kailangang bigyan ang Scrapy ng isa pang Request na maiiskedyul.

Para sa GET na tahasang pinagdesisyunan ng iyong callback na subukang muli, maaaring itago ng pampublikong retry helper ng Scrapy ang pagbilang ng retry kasama ng bagong kahilingan:

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

Ito ay isang helper ng spider. Dapat ibalik o i-yield ng tumatawag ang resultang Request kapag may magagamit. Ang None ay nangangahulugang tinanggihan ng helper ang isa pang retry sa loob ng naaangkop na limitasyon.

Kinokopya ng retry helper ang kahilingan, ina-update ang bilang ng retry at ibinibigay ang pag-uugali ng scheduler na angkop sa isang retry. Ang pag-yield lamang ng parehong URL bilang ordinaryong bagong kahilingan ay maaaring makasalubong sa pag-filter ng duplicate.

Gumamit ng proxy URL na sinusuportahan ng naka-enable na HttpProxyMiddleware. Para sa mga retry ng pinapayagang pampublikong GET na kahilingan, ang isang hindi authenticated na HTTP candidate mula sa listahan ng HTTP proxy ay makapagbibigay ng proxy_url. Ang pag-clear ng dating nakalakip na field na proxy-authorization ay pumipigil sa header ng lumang tagapamagitan na makarating sa pagpiling ito; hayaan ang middleware na makuha ang bagong account mula sa bagong proxy URL kapag naaangkop.

Panatilihing hiwalay ang pagpiling ito sa antas ng callback mula sa awtomatikong paghawak ng RetryMiddleware sa mga naka-configure nitong pagkabigo. Magpasya kung aling layer ang may-ari ng retry upang hindi gumamit ng dalawang independiyenteng badyet ang operasyon. Ang halimbawa ay tungkol sa GET na gawaing maaaring i-replay, hindi isang pangakong ligtas ang pag-uulit ng di-makatwirang isinumiteng transaksyon.

Kaugnay na mga artikulo