Sesi tempel mempertahankan IP yang sama untuk durasi tertentu. Sesi rotasi menetapkan IP baru per request. Memilih yang salah akan meningkatkan tarif CAPTCHA dan membuang-buang kredit API.
Cara Kerja Setiap Mode
STICKY SESSION:
Request 1 ──▶ IP: 192.168.1.50 ──▶ site.com/login
Request 2 ──▶ IP: 192.168.1.50 ──▶ site.com/dashboard
Request 3 ──▶ IP: 192.168.1.50 ──▶ site.com/account
(Same IP for all requests in the session window)
ROTATING SESSION:
Request 1 ──▶ IP: 192.168.1.50 ──▶ site.com/page1
Request 2 ──▶ IP: 10.0.0.77 ──▶ site.com/page2
Request 3 ──▶ IP: 172.16.5.22 ──▶ site.com/page3
(Different IP per request)
Perbandingan Head-to-Head
| Faktor | Lengket | Berputar |
|---|---|---|
| IP per request | Sama selama 1-30 menit | Baru setiap request |
| Konsistensi sesi | Tinggi | Tidak ada |
| Tarif CAPTCHA (aliran multi-langkah) | Rendah (5-10%) | Tinggi (30-50%) |
| Tarif CAPTCHA (satu halaman) | Sedang (10-20%) | Rendah (5-10%) |
| Validitas token | Lebih tinggi — IP yang sama | Risiko ketidakcocokan |
| Kecepatan | Cepat (menggunakan kembali koneksi) | Lebih lambat (koneksi baru) |
| Larangan risiko | Lebih tinggi jika ditandai | Rendah — IP baru setiap saat |
| Biaya | Sama atau sedikit lebih | Sama |
| Terbaik untuk | Masuk, checkout, autentikasi | Scraping massal, cari |
Saat Sticky Session Menang
Alur Kerja Multi-Langkah
CAPTCHA memvalidasi token terhadap IP yang meminta. Jika IP Anda berubah antara solve dan pengiriman, token mungkin ditolak.
import requests
import time
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"
# Sticky session: same IP for the entire login flow
STICKY_PROXY = {
"http": "http://user-session-abc123:pass@proxy.example.com:5000",
"https": "http://user-session-abc123:pass@proxy.example.com:5000",
}
session = requests.Session()
session.proxies = STICKY_PROXY
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 Chrome/126.0.0.0 Safari/537.36",
})
def login_with_captcha(url, sitekey, username, password):
"""Full login flow — MUST use same IP throughout."""
# Step 1: Load login page (IP: 192.168.1.50)
session.get(url)
# Step 2: Solve CAPTCHA (solved against IP: 192.168.1.50)
token = solve_recaptcha(sitekey, url)
# Step 3: Submit login (MUST be IP: 192.168.1.50)
resp = session.post(url, data={
"username": username,
"password": password,
"g-recaptcha-response": token,
})
return resp.status_code == 200
def solve_recaptcha(sitekey, pageurl):
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1,
})
task_id = resp.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = result.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("CAPTCHA solve timeout")
Mengapa Konsistensi IP Penting
Sticky session:
1. Browser loads page → IP: 5.5.5.5
2. CAPTCHA solved → Token bound to session
3. Form submitted → IP: 5.5.5.5 ✅ Token accepted
Rotating session:
1. Browser loads page → IP: 5.5.5.5
2. CAPTCHA solved → Token bound to session
3. Form submitted → IP: 9.9.9.9 ❌ Token may be rejected
Saat Sesi Berputar Menang
Scraping Halaman Massal
Setiap halaman bersifat independen. Memutar IP menyebarkan request ke kumpulan yang lebih besar, sehingga mengurangi deteksi per IP.
import concurrent.futures
ROTATING_PROXY = {
"http": "http://user:pass@rotating.proxy.example.com:5000",
"https": "http://user:pass@rotating.proxy.example.com:5000",
}
def scrape_page(url):
"""Each request gets a fresh IP automatically."""
resp = requests.get(
url,
proxies=ROTATING_PROXY,
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"},
timeout=30,
)
if resp.status_code == 200:
return url, resp.text
return url, None
urls = [f"https://example.com/products?page={i}" for i in range(1, 501)]
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as pool:
results = list(pool.map(scrape_page, urls))
success = sum(1 for _, html in results if html)
print(f"Scraped: {success}/{len(urls)}")
Scraping Mesin Pencari
Mesin pencari melacak volume request per IP. Rotasi menghindari rate limit:
def scrape_search(query, pages=10):
results = []
for page in range(pages):
# Each request → new IP
resp = requests.get(
"https://search-engine.example.com/search",
params={"q": query, "start": page * 10},
proxies=ROTATING_PROXY,
timeout=20,
)
results.append(resp.text)
time.sleep(2)
return results
Strategi Hibrid
Gunakan kedua mode dalam alur yang sama:
class HybridProxyManager:
"""Sticky for multi-step flows, rotating for single requests."""
def __init__(self, provider_host, username, password, port=5000):
self.host = provider_host
self.username = username
self.password = password
self.port = port
def get_rotating_proxy(self):
return {
"http": f"http://{self.username}:{self.password}@{self.host}:{self.port}",
"https": f"http://{self.username}:{self.password}@{self.host}:{self.port}",
}
def get_sticky_proxy(self, session_id, duration_min=10):
sticky_user = f"{self.username}-session-{session_id}-ttl-{duration_min}"
return {
"http": f"http://{sticky_user}:{self.password}@{self.host}:{self.port}",
"https": f"http://{sticky_user}:{self.password}@{self.host}:{self.port}",
}
proxy_mgr = HybridProxyManager("proxy.example.com", "user", "pass")
def scrape_with_auto_strategy(url, needs_login=False):
if needs_login:
# Multi-step → sticky
import uuid
session_id = uuid.uuid4().hex[:8]
proxy = proxy_mgr.get_sticky_proxy(session_id)
else:
# Single page → rotating
proxy = proxy_mgr.get_rotating_proxy()
return requests.get(url, proxies=proxy, timeout=30)
Implementasi Node.js
const axios = require("axios");
const CAPTCHAAI_KEY = "YOUR_API_KEY";
const PROXY_HOST = "proxy.example.com";
const PROXY_PORT = 5000;
function getProxy(mode, sessionId = null) {
const user =
mode === "sticky" ? `user-session-${sessionId}` : "user";
return {
proxy: {
host: PROXY_HOST,
port: PROXY_PORT,
auth: { username: user, password: "pass" },
},
};
}
// Rotating: bulk scrape
async function scrapePages(urls) {
const results = [];
for (const url of urls) {
const config = getProxy("rotating");
const resp = await axios.get(url, { ...config, timeout: 30000 });
results.push({ url, data: resp.data });
}
return results;
}
// Sticky: login flow
async function loginFlow(loginUrl, sitekey, credentials) {
const sessionId = Date.now().toString(36);
const config = getProxy("sticky", sessionId);
// Step 1: Load page
await axios.get(loginUrl, config);
// Step 2: Solve CAPTCHA
const submitResp = await axios.post(
"https://ocr.captchaai.com/in.php",
null,
{
params: {
key: CAPTCHAAI_KEY,
method: "userrecaptcha",
googlekey: sitekey,
pageurl: loginUrl,
json: 1,
},
}
);
const taskId = submitResp.data.request;
let token;
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const res = await axios.get("https://ocr.captchaai.com/res.php", {
params: { key: CAPTCHAAI_KEY, action: "get", id: taskId, json: 1 },
});
if (res.data.request !== "CAPCHA_NOT_READY") {
token = res.data.request;
break;
}
}
// Step 3: Submit with same IP
return axios.post(
loginUrl,
{
...credentials,
"g-recaptcha-response": token,
},
config
);
}
Matriks Keputusan
| Alur kerja | Direkomendasikan | Mengapa |
|---|---|---|
| Masuk / daftar | Lengket | Token terikat pada IP |
| Pembayaran / pembayaran | Lengket | Cookie sesi memerlukan IP yang sama |
| Scraping halaman massal | Berputar | Mendistribusikan beban |
| Scraping mesin pencari | Berputar | Menghindari rate limit per-IP |
| Polling API (endpoint yang sama) | Berputar | Mengurangi sinyal browser per-IP |
| Navigasi multi-halaman | Lengket | Cookie dilacak berdasarkan IP |
| Pemantauan harga | Berputar | Banyak request independen |
| Manajemen akun | Lengket | Integritas sesi |
| Pengiriman formulir dengan CAPTCHA | Lengket | Pengikatan Token–IP |
| Verifikasi iklan | Berputar | Simulasikan beragam pengguna |
Durasi Sesi Tetap
| Durasi | Terbaik Untuk | Resiko |
|---|---|---|
| 1 menit | Formulir cepat dikirimkan | Mungkin kedaluwarsa di tengah aliran |
| 5 menit | Login + tindakan standard | Keseimbangan yang bagus |
| 10 menit | Alur multi-halaman yang kompleks | Risiko larangan sedang |
| 30 menit | Sesi penjelajahan yang diperpanjang | Risiko larangan lebih tinggi |
| 60 menit | Operasi akun panjang | Risiko larangan tertinggi |
Aturan praktis: Tetapkan durasi melekat menjadi 2x waktu aliran yang diharapkan.
Pemecahan Masalah
| Masalah | Penyebab | Solusi |
|---|---|---|
| Token CAPTCHA ditolak setelah diselesaikan | IP berubah antara selesaikan dan kirim | Beralih ke sticky session |
| Tingkat CAPTCHA tinggi pada satu halaman | IP melekat yang sama mengenai terlalu banyak halaman | Beralih ke berputar |
| Cookie sesi hilang | Sesi melekat telah berakhir | Tingkatkan durasi TTL |
| Kinerja berputar lambat | Overhead koneksi per IP baru | Gunakan pengumpulan koneksi |
| IP terlarang dalam sticky session | Semua request berbagi IP yang ditandai | Kurangi TTL sesi atau tambahkan penundaan |
Pertanyaan Umum
Bisakah saya mencampurkan lengket dan berputar dalam satu proyek?
Ya. Gunakan pendekatan hibrid — melekat untuk alur autentikasi, bergilir untuk pengumpulan data. Sebagian besar penyedia proxy mendukung kedua mode tersebut pada paket yang sama.
Apakah sticky session menjamin IP yang sama?
Kebanyakan penyedia menjaminnya dalam jendela TTL. Jika IP menjadi tidak tersedia (penugasan ulang operator, rotasi kumpulan), IP baru akan ditetapkan.
Modus mana yang lebih murah?
Harga yang sama — Anda membayar per GB atau per request, apa pun modenya. Perbedaan biaya berasal dari tarif CAPTCHA: mode salah → lebih banyak CAPTCHA → pembelanjaan CaptchaAI lebih tinggi.
Bagaimana cara mengatur sesi melekat dengan penyedia proxy saya?
Kebanyakan menggunakan ID sesi pada nama pengguna: user-session-abc123. Periksa dokumen penyedia Anda untuk mengetahui format persisnya. Kami meliputData Cerah,Proxy pintar, Danlaboratorium oksidalam panduan khusus.
Panduan Terkait
- Memutar egress jaringan yang diotorisasi
- Kualitas Proxy Mempengaruhi Tingkat Solve
- Kegigihan Sesi Browser
Sesuaikan strategi proxy Anda dengan alur kerja Anda —dapatkan kunci CaptchaAI Andauntuk menangani CAPTCHA dalam mode sesi apa pun.