یکی از عزیزان از بنده درخواست کرد که جهت جلوگیری از خطای 429 چه کاری می شود انجام داد. این خطا توسط سرور به دلیل درخواست های مکرر که از یک آی پی مشخص فرستاده می شود رخ می دهد. سرور درخواست های مکرر را به عنوان اسپم شناسایی می کند و نتیجتا شما را به مدت زمان خاص، از ارسال درخواست منع می کند. تصمیم گرفتم یکی از راه های دور زدن چنین خطایی را براتون بگم (در نظر داشته باشید در حالت عادی اگر نیاز مبرم ندارید، بهتر است به ارور سرور احترام بگذارید زیرا سرور تحت فشار قرار میگیرد و درستش این است که اسپم نکنید)
بریم سراغ آموزش، اولین کاری که لازم است انجام بدهید راه اندازی تور بر روی سیستم خودتان است. در واقع تور یک سیستم غیر متمرکز از نودهای داوطلبانه در حال اجراست. با استفاده از تور، شما می توانید آی پی خود را برای هر بار درخواست تغییر بدهید. در نظر داشته باشید همه سرورها قرار نیست با این روش، خطایشان دور زده شود زیرا احتمال بسیار بالایی متوجه خواهد شد که شما در حال تغییر آی پی های متعدد هستید.
منطقی ترین روش جهت راه اندازی تور، استفاده از داکر tor است. در ترمینال یا CMD دستور زیر را وارد کنید:
docker run --name='tor-privoxy' -d -p 9050:9050 -p 9051:9051 -p 8118:8118 dockage/tor-privoxy:latest
اندکی فرصت بدهید تا ایمیج تور دانلود و کانتینرش راه اندازی شود. پورت 9050 پورتی است که تور از آن استفاده میکند و 9051 همان پورتی است که شما جهت ارتباط برقرار کردن و دریافت آی پی جدید از تور استفاده خواهید کرد.
حالا از طریق دستور زیر وارد محیط شل داکر تور بشوید:
در ویندوز
docker exec -it tor-privoxy sh
در لینوکس
docker exec -it tor-privoxy bash
حالا در محیط شل، با اجرای دستور tor مطمئن شوید تور در حال اجراست:
/ # tor Sep 08 21:47:12.582 [notice] Tor 0.3.4.11 (git-4fd31340f3355342) running on Linux with Libevent 2.1.8-stable, OpenSSL 1.1.1b, Zlib 1.2.11, Liblzma N/A, and Libzstd N/A.
سپس برای سرویس تور خود یک پسورد تعیین کنید:
tor --hash-password YOUR-PASSWORD-HERE
در پاسخ به این دستور، تور پسورد شما را هش میکند. شما باید این پسورد هش شده را در داخل فایل تنظیمات تور قرار بدهید. پس این پسورد را جایی یادداشت کنید. در همان محیط شل وارد مسیر : etc/tor/ بشوید و فایل تنظیمات تور را باز کنید:
$ cd /etc/tor $ sudo vi torrc
آپشن HashedControlPassword
را پیدا کنید و آن را از حالت کامنت در بیارید و پسورد خود را مقابل آن پیست کنید.
حالا با زدن گزینه esc و نوشتن دستور wq: آن را ذخیره و از محیط ویرایش vi خارج شوید.
حالا نیاز دارید 3 پکیج پایتونی را نصب کنید. در ترمینال یا CMD:
pip install stem
pip install requests
pip install pysocks
پکیج اولی جهت ارتباط برقرار کردن با سرویس تور است. حالا کدهای زیر را در فایل پایتونی خود وارد کنید:
import requests import time from stem import Signal from stem.control import Controller def get_current_ip(): session = requests.session() session.proxies = {} session.proxies['http']='socks5h://localhost:9050' session.proxies['https']='socks5h://localhost:9050' try: r = session.get('http://httpbin.org/ip') except Exception as e: print str(e) else: return r.text def renew_tor_ip(): with Controller.from_port(port = 9051) as controller: controller.authenticate(password="پسورد") controller.signal(Signal.NEWNYM) for i in range(5): get_current_ip() renew_tor_ip() time.sleep(5)
همینطور که میبینید ما 2 تابع تعریف کردیم که تابع نخست در واقع آپشن پروکسی را به ریکوئست ما اضافه میکند و تابع دوم، پس از هر درخواست، آی پی ما را تغییر می دهد.
به همین سادگی شما می تونید با آیپی های متغییر، به سرور درخواست بدید. اگر راه های ساده تری هم به ذهنتون میرسه، واسم کامنت کنید :)