ការផ្លាស់ប្តូរ 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 ប្រូកស៊ីដែល HttpProxyMiddleware សកម្មគាំទ្រ។ សម្រាប់ការព្យាយាមឡើងវិញនៃសំណើ GET សាធារណៈដែលបានអនុញ្ញាត បេក្ខជន HTTP ដែលមិនមានការផ្ទៀងផ្ទាត់ពី បញ្ជីប្រូកស៊ី HTTP អាចផ្តល់ proxy_url។ ការសម្អាតវាល proxy-authorization ដែលបានភ្ជាប់ពីមុន ជៀសវាងការយកក្បាលរបស់អន្តរការីចាស់ចូលក្នុងជម្រើសនេះ។ ទុកឱ្យ middleware ទាញយកគណនីថ្មីពី URL ប្រូកស៊ីថ្មី នៅពេលពាក់ព័ន្ធ។

រក្សាជម្រើសកម្រិត callback នេះឱ្យដាច់ពីការគ្រប់គ្រងស្វ័យប្រវត្តិរបស់ RetryMiddleware លើការបរាជ័យដែលបានកំណត់របស់វា។ សម្រេចថាស្រទាប់ណាជាម្ចាស់ការព្យាយាមឡើងវិញ ដើម្បីកុំឱ្យប្រតិបត្តិការប្រើថវិកាឯករាជ្យពីរ។ ឧទាហរណ៍នេះនិយាយអំពីការងារ GET ដែលអាចលេងឡើងវិញ មិនមែនជាការសន្យាថាការធ្វើឡើងវិញនូវប្រតិបត្តិការដែលបានដាក់ស្នើតាមអំពើចិត្តគឺមានសុវត្ថិភាពទេ។

អត្ថបទពាក់ព័ន្ធ