response.request.meta বদলালে একটি Python অবজেক্ট বদলায়। আরেকটি ডাউনলোড করতে Scrapy-কে নির্ধারণের জন্য আরেকটি Request দিতে হবে।

আপনার callback স্পষ্টভাবে পুনরায় চেষ্টা করার সিদ্ধান্ত নেওয়া GET-এর জন্য 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 সহায়ক। এটির আহ্বানকারীকে ফলাফল Request উপলব্ধ হলে ফেরত দিতে বা yield করতে হবে। None মানে সহায়কটি প্রযোজ্য সীমার মধ্যে আরেকটি পুনরায় চেষ্টা প্রত্যাখ্যান করেছে।

পুনরায় চেষ্টার সহায়ক অনুরোধটি অনুলিপি করে, এর পুনরায় চেষ্টার সংখ্যা হালনাগাদ করে এবং পুনরায় চেষ্টার জন্য উপযুক্ত নির্ধারক আচরণ সরবরাহ করে। একই URL একটি সাধারণ নতুন অনুরোধ হিসেবে yield করলে বরং নকল ফিল্টারিং-এ পড়তে পারে।

সক্রিয় HttpProxyMiddleware যে প্রক্সি URL সমর্থন করে তা ব্যবহার করুন। অনুমোদিত সার্বজনীন GET অনুরোধের পুনরায় চেষ্টার জন্য, HTTP প্রক্সি তালিকা থেকে একটি অনুমোদনহীন HTTP প্রার্থী proxy_url সরবরাহ করতে পারে। পূর্বে সংযুক্ত proxy-authorization ক্ষেত্র মুছে ফেললে পুরনো মধ্যস্থকারীর হেডার এই নির্বাচনে যাওয়া এড়ানো যায়; প্রযোজ্য হলে মিডলওয়্যারকে নতুন প্রক্সি URL থেকে নতুন অ্যাকাউন্ট বের করতে দিন।

এই callback-স্তরের নির্বাচনকে RetryMiddleware-এর নিজস্ব কনফিগার করা ব্যর্থতার স্বয়ংক্রিয় পরিচালনা থেকে আলাদা রাখুন। পুনরায় চেষ্টার মালিক কোন স্তর তা নির্ধারণ করুন যাতে ক্রিয়াটি দুটি স্বাধীন বাজেট না খায়। উদাহরণটি পুনরায় চালানোযোগ্য GET কাজ সম্পর্কে, যেকোনো জমা দেওয়া লেনদেন পুনরাবৃত্তি করা নিরাপদ বলে প্রতিশ্রুতি নয়।

সম্পর্কিত নিবন্ধ