Mae newid response.request.meta yn newid gwrthrych Python. I lawrlwytho eto, rhaid rhoi Request arall i Scrapy i'w drefnu.

Ar gyfer GET y mae eich callback yn penderfynu'n benodol ei ailgynnig, gall cymorth ailgynnig cyhoeddus Scrapy gadw'r cyfrif ailgynnig gyda'r cais newydd:

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

Cymorth pry cop yw hwn. Rhaid i'r galwr ddychwelyd neu yieldio'r Request sy'n deillio pan fydd ar gael. Mae None yn golygu bod y cymorth wedi gwrthod ailgynnig arall o fewn y terfyn perthnasol.

Mae'r cymorth ailgynnig yn copïo'r cais, yn diweddaru ei gyfrif ailgynnig ac yn darparu ymddygiad y trefnydd sy'n briodol ar gyfer ailgynnig. Gall yieldio'r un URL fel cais newydd cyffredin daro hidlo dyblygiadau yn lle hynny.

Defnyddiwch URL procsi a gefnogir gan yr HttpProxyMiddleware sy'n weithredol. Ar gyfer ailgynnig ceisiadau GET cyhoeddus a ganiateir, gall ymgeisydd HTTP heb ei ardystio o'r rhestr procsi HTTP ddarparu proxy_url. Mae clirio maes proxy-authorization a atodwyd yn gynharach yn osgoi cario pennawd cyfryngwr hen i'r dewis hwn; gadewch i'r middleware ddeillio'r cyfrif newydd o URL y procsi newydd pan fo'n berthnasol.

Cadwch y dewis hwn ar lefel callback ar wahân i driniaeth awtomatig RetryMiddleware o'i fethiannau wedi'u ffurfweddu. Penderfynwch pa haen sy'n berchen ar yr ailgynnig fel nad yw'r llawdriniaeth yn defnyddio dwy gyllideb annibynnol. Mae'r enghraifft yn ymwneud â gwaith GET y gellir ei ailchwarae, nid addewid bod ailadrodd trafodiad a gyflwynwyd yn fympwyol yn ddiogel.

Erthyglau cysylltiedig