Python میں proxies rotate کرنا: requests، httpx اور aiohttp (گائیڈ 2026)

شائع کردہ 2 جون 2026 · ≈10 منٹ کا مطالعہ

اگر آپ Python میں بڑے پیمانے پر scraping، crawling یا کسی بھی چیز کی automation کرتے ہیں، تو دیر سویر ٹارگٹ سائٹ نوٹ کر لیتی ہے کہ ہر request ایک ہی IP سے آ رہی ہے اور آپ کو بلاک کر دیتی ہے۔ Python میں rotating proxies آپ کے traffic کو بہت سے IP پتوں پر تقسیم کر دیتے ہیں تاکہ کوئی ایک IP نہ تو rate limit پھلانگے اور نہ ہی ban کا شکار ہو۔ یہ گائیڈ requests، httpx اور aiohttp کے لیے بالکل درست code دکھاتی ہے، اور ساتھ ہی یہ بھی کہ rotating gateway اور managed IP pool میں سے کسے چنا جائے۔

دو وسیع فیصلے نیچے کی ہر چیز کو شکل دیتے ہیں۔ پہلا: rotating بمقابلہ sticky sessions — ہر request پر نیا IP، یا کسی multi-step flow کے لیے ایک ہی IP پکڑے رکھنا۔ دوسرا: residential بمقابلہ datacenter IPs — دیکھیں proxy-type فیصلہ سازی میٹرکس۔ ان دونوں کو درست کر لیں تو code تو آسان حصہ ہے۔

Rotate کرنے کے دو طریقے

1. Gateway rotation (تجویز کردہ)۔ آپ ایک ہی endpoint سے connect ہوتے ہیں اور provider ہر نئے connection پر آپ کو تازہ exit IP تھما دیتا ہے۔ نہ کوئی فہرست سنبھالنی، نہ کوئی مردہ IP چھانٹنا۔ JIBAO کا dynamic residential pool اسی طرح کام کرتا ہے: وہی host اور port، ہر request پر نیا IP۔

2. خود سنبھالی گئی IP فہرست۔ آپ کے پاس host:port entries کی ایک فہرست ہوتی ہے اور آپ ہر request کے لیے ایک چنتے ہیں۔ زیادہ کنٹرول، مگر health-checking، retries اور ban-tracking آپ کی ذمہ داری۔ یہ dedicated datacenter IPs کے ساتھ کارآمد ہے جب آپ کو معلوم، مستحکم پتے چاہئیں۔

requests کے ساتھ rotation

سب سے سادہ صورت — ایک request کو ایسے gateway سے گزارنا جو آپ کے لیے rotate کرتا ہے۔ socks5h:// استعمال کریں (آخری h کا مطلب ہے کہ DNS proxy کی طرف resolve ہوتا ہے، جو lookups کے leak ہونے سے بچاتا ہے):

import requests

# JIBAO rotating residential gateway: a new exit IP per connection
PROXY = "socks5h://USERNAME:[email protected]:10001"

proxies = {"http": PROXY, "https": PROXY}

for _ in range(5):
    r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=30)
    print(r.json()["origin"])   # a different IP each loop

کیا requests کو SOCKS5 بولنا ہے؟ اضافی پیکج install کریں: pip install "requests[socks]"۔ اگر آپ HTTP proxy endpoint کو ترجیح دیتے ہیں تو scheme کو http:// سے بدل دیں — باقی سب ویسا ہی رہتا ہے۔

اپنی ذاتی IP فہرست سے rotation

import random
import requests

PROXY_POOL = [
    "socks5h://USERNAME-country-us:[email protected]:10001",
    "socks5h://USERNAME-country-uk:[email protected]:10001",
    "socks5h://USERNAME-country-de:[email protected]:10001",
]

def fetch(url):
    proxy = random.choice(PROXY_POOL)
    return requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=30)

resp = fetch("https://example.com")
print(resp.status_code)

Sticky sessions جب آپ کو ایک ہی IP رکھنا ہو

Login flows، carts، اور paginated results ٹوٹ جاتے ہیں اگر IP کام کے بیچ بدل جائے۔ username میں ایک session token جوڑ کر IP کو pin کریں؛ اسی token کو دوبارہ استعمال کر کے اس کی عمر بھر وہی exit IP برقرار رکھیں:

import requests

SESSION_ID = "task-0001"
PROXY = f"socks5h://USERNAME-session-{SESSION_ID}:[email protected]:10001"

s = requests.Session()
s.proxies = {"http": PROXY, "https": PROXY}

s.post("https://example.com/login", data={"u": "me", "p": "secret"})
s.get("https://example.com/dashboard")   # same IP, session intact

httpx کے ساتھ rotation

httpx آپ کو HTTP/2 اور native async کے ساتھ ایک جدید client دیتا ہے۔ نوٹ کریں کہ نئے versions ایک ہی proxy= argument لیتے ہیں:

import httpx

PROXY = "socks5h://USERNAME:[email protected]:10001"

with httpx.Client(proxy=PROXY, timeout=30) as client:
    for _ in range(5):
        print(client.get("https://httpbin.org/ip").json()["origin"])

httpx میں SOCKS سپورٹ کے لیے pip install "httpx[socks]" درکار ہے۔ HTTP/2 کے لیے client میں http2=True شامل کریں — اس سے آپ کا traffic ایک حقیقی browser جیسا زیادہ لگتا ہے، جو TLS fingerprint matching کے ساتھ اچھا جوڑ بناتا ہے۔

aiohttp کے ساتھ concurrent rotation

زیادہ throughput کے لیے بیک وقت کئی requests داغ دیں۔ gateway سے ہر connection کو اپنا exit IP ملتا ہے، چنانچہ concurrency اور rotation ساتھ ساتھ آتے ہیں:

import asyncio
import aiohttp
from aiohttp_socks import ProxyConnector

PROXY = "socks5://USERNAME:[email protected]:10001"

async def fetch(url):
    connector = ProxyConnector.from_url(PROXY)
    async with aiohttp.ClientSession(connector=connector) as session:
        async with session.get(url, timeout=aiohttp.ClientTimeout(total=30)) as r:
            return await r.text()

async def main():
    urls = ["https://httpbin.org/ip"] * 20
    results = await asyncio.gather(*(fetch(u) for u in urls))
    print(f"fetched {len(results)} pages")

asyncio.run(main())

SOCKS connector کو pip install aiohttp_socks سے install کریں۔ ہر task کے لیے ایک تازہ connector بنائیں تاکہ ہر request ایک نیا proxied connection کھولے۔

وہ Retry Logic جو واقعی کام آتی ہے

Rotation تب ہی فائدہ دیتی ہے جب آپ ناکامیوں کو ایک تازہ IP پر دوبارہ آزمائیں۔ exponentially back off کریں اور ہر کوشش پر session token rotate کریں:

import requests
from time import sleep

def fetch_with_retry(url, max_retries=4):
    for attempt in range(max_retries):
        proxy = f"socks5h://USERNAME-session-r{attempt}:[email protected]:10001"
        try:
            r = requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=30)
            if r.status_code in (403, 429):
                raise requests.HTTPError(f"blocked: {r.status_code}")
            r.raise_for_status()
            return r.text
        except requests.RequestException:
            sleep(2 ** attempt)        # 1s, 2s, 4s, 8s
    raise RuntimeError(f"failed after {max_retries} tries: {url}")

تصدیق کریں کہ آپ کی Rotation کام کر رہی ہے

کسی بڑے run سے پہلے یقینی بنائیں کہ IP واقعی بدل رہا ہے۔ کسی echo endpoint کو چند بار hit کریں اور دیکھیں کہ IPs مختلف ہیں۔ یہ بھی تصدیق کرنے کے لیے کہ آپ کا TLS fingerprint آپ کو دھوکا نہیں دے رہا، request کو JIBAO کے مفت JA3/TLS fingerprint checker پر چلائیں — ایک rotating IP اگر واضح طور پر Python والے fingerprint کے ساتھ ہو تو پھر بھی بلاک ہو جاتا ہے۔

بہترین طریقے

جب rotation مضبوط ہو جائے، تو اگلی دیوار جس سے آپ ٹکراتے ہیں عموماً fingerprinting ہوتی ہے، IPs نہیں۔ اگر صاف residential IPs پھر بھی 403 دیں، تو پڑھیں curl_cffi سے TLS fingerprinting کیسے bypass کریں اور مکمل Cloudflare bypass نسخہ۔

Rotating Residential Proxies حاصل کریں

500MB مفت ٹریفک اور ایک rotating residential gateway حاصل کریں جو ہر request پر آپ کو نیا IP تھماتا ہے۔

مفت ٹرائل شروع کریں

تمام IP پروڈکٹس کے لیے · ہر وقت دستیاب نوڈز کا وسیع پول

ابھی رجسٹر کریں اور ری چارج پر 100% تک کیش بیک حاصل کریں

نئے صارفین کو سائن اپ پر 500MB ملتے ہیں، اس کے علاوہ پہلے ری چارج پر بونس۔ پیشکش محدود وقت کے لیے ہے۔