ព្យាយាម GET របស់ Scrapy ឡើងវិញតាមរយៈប្រូកស៊ីផ្សេង
ប្រើជំនួយការព្យាយាមឡើងវិញរបស់ Scrapy ដើម្បីកំណត់ពេលសំណើថ្មីជាមួយប្រូកស៊ីថ្មី ដោយគោរពថវិកាព្យាយាមឡើងវិញ។
ការផ្លាស់ប្តូរ 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 ដែលអាចលេងឡើងវិញ មិនមែនជាការសន្យាថាការធ្វើឡើងវិញនូវប្រតិបត្តិការដែលបានដាក់ស្នើតាមអំពើចិត្តគឺមានសុវត្ថិភាពទេ។