Proxy SOCKS5 beroperasi pada tingkat jaringan yang lebih rendah daripada proxy HTTP - proxy ini menangani semua jenis lalu lintas (HTTP, HTTPS, FTP, UDP) tanpa mengubah request. Hal ini membuatnya lebih sulit dideteksi dan ideal untuk situs yang dilindungi CAPTCHA. Panduan ini mencakup penyiapan SOCKS5 di Python, Node.js, dan alat otomatisasi browser.
SOCKS5 vs Proxy HTTP
| Fitur | Proxy HTTP/HTTPS | Proxy SOCKS5 |
|---|---|---|
| Dukungan protokol | HTTP/HTTPS saja | TCP/UDP apa pun |
| Modifikasi tajuk | Boleh tambah X-Forwarded-For |
Tidak ada modifikasi |
| Deteksi | Lebih mudah (header bocor) | Lebih sulit |
| Kecepatan | Cepat | Sedikit lebih lambat |
| Otentikasi | Dasar/Digest | Nama pengguna/password |
| resolusi DNS | Sisi klien | Sisi server (SOCKS5h) |
| dukungan WebSocket | Terbatas | Penuh |
Pengaturan Python
request + PySocks
pip install requests[socks] pysocks
import requests
import time
SOCKS5_HOST = "proxy.example.com"
SOCKS5_PORT = 1080
SOCKS5_USER = "proxyuser"
SOCKS5_PASS = "proxypass"
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"
# SOCKS5 proxy configuration
proxies = {
"http": f"socks5h://{SOCKS5_USER}:{SOCKS5_PASS}@{SOCKS5_HOST}:{SOCKS5_PORT}",
"https": f"socks5h://{SOCKS5_USER}:{SOCKS5_PASS}@{SOCKS5_HOST}:{SOCKS5_PORT}",
}
# socks5h = DNS resolved by proxy server (recommended)
# socks5 = DNS resolved locally
def fetch_through_socks(url):
"""Fetch URL through SOCKS5 proxy."""
return requests.get(
url,
proxies=proxies,
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 Chrome/126.0.0.0 Safari/537.36"
},
timeout=30,
)
def solve_captcha(site_url, sitekey):
"""Solve CAPTCHA via CaptchaAI (direct, no proxy needed)."""
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"json": 1,
})
data = resp.json()
if data["status"] != 1:
raise Exception(f"Submit: {data['request']}")
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY,
"action": "get",
"id": task_id,
"json": 1,
})
data = resp.json()
if data["request"] == "CAPCHA_NOT_READY":
continue
if data["status"] == 1:
return data["request"]
raise Exception(f"Solve: {data['request']}")
raise TimeoutError("Timeout")
# Full workflow
resp = fetch_through_socks("https://staging.example.com/qa-form")
import re
match = re.search(r'data-sitekey="([^"]+)"', resp.text)
if match:
token = solve_captcha("https://staging.example.com/qa-form", match.group(1))
# Submit with token through same proxy
resp = requests.post(
"https://target.com/submit",
data={"g-recaptcha-response": token},
proxies=proxies,
)
aiohttp + SOCKS5
import aiohttp
import aiohttp_socks
import asyncio
async def fetch_async(url):
connector = aiohttp_socks.ProxyConnector.from_url(
f"socks5://{SOCKS5_USER}:{SOCKS5_PASS}@{SOCKS5_HOST}:{SOCKS5_PORT}"
)
async with aiohttp.ClientSession(connector=connector) as session:
async with session.get(url) as resp:
return await resp.text()
asyncio.run(fetch_async("https://staging.example.com/qa-form"))
Selenium + SOCKS5
from selenium import webdriver
from selenium.webdriver.common.by import By
def create_socks5_driver(host, port, username=None, password=None):
options = webdriver.ChromeOptions()
# SOCKS5 proxy (no auth via command line)
options.add_argument(f"--proxy-server=socks5://{host}:{port}")
# DNS through proxy
options.add_argument("--host-resolver-rules=MAP * ~NOTFOUND, EXCLUDE 127.0.0.1")
options.add_argument("--window-size=1920,1080")
driver = webdriver.Chrome(options=options)
return driver
# For authenticated SOCKS5, use seleniumwire
from seleniumwire import webdriver as sw_webdriver
def create_auth_socks5_driver():
options = {
"proxy": {
"http": f"socks5h://{SOCKS5_USER}:{SOCKS5_PASS}@{SOCKS5_HOST}:{SOCKS5_PORT}",
"https": f"socks5h://{SOCKS5_USER}:{SOCKS5_PASS}@{SOCKS5_HOST}:{SOCKS5_PORT}",
}
}
chrome_options = sw_webdriver.ChromeOptions()
chrome_return sw_webdriver.Chrome(
seleniumwire_options=options,
options=chrome_options,
)
# Usage
driver = create_auth_socks5_driver()
driver.get("https://staging.example.com/qa-form")
time.sleep(3)
sitekey = driver.execute_script(
"return document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey')"
)
if sitekey:
token = solve_captcha("https://staging.example.com/qa-form", sitekey)
driver.execute_script(f"""
document.querySelector('#g-recaptcha-response').value = '{token}';
""")
driver.find_element(By.CSS_SELECTOR, "form").submit()
driver.quit()
Node.js + SOCKS5
const { SocksProxyAgent } = require("socks-proxy-agent");
const axios = require("axios");
const CAPTCHAAI_KEY = "YOUR_API_KEY";
const socksAgent = new SocksProxyAgent(
"socks5h://proxyuser:proxypass@proxy.example.com:1080"
);
async function fetchViaSocks(url) {
return axios.get(url, {
httpsAgent: socksAgent,
httpAgent: socksAgent,
headers: {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126.0.0.0",
},
});
}
async function solveCaptcha(siteUrl, sitekey) {
// CaptchaAI calls don't go through SOCKS proxy
const submit = await axios.post(
"https://ocr.captchaai.com/in.php",
null,
{
params: {
key: CAPTCHAAI_KEY,
method: "userrecaptcha",
googlekey: sitekey,
pageurl: siteUrl,
json: 1,
},
}
);
const taskId = submit.data.request;
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const result = await axios.get("https://ocr.captchaai.com/res.php", {
params: { key: CAPTCHAAI_KEY, action: "get", id: taskId, json: 1 },
});
if (result.data.request === "CAPCHA_NOT_READY") continue;
if (result.data.status === 1) return result.data.request;
}
throw new Error("Timeout");
}
Dalang + SOCKS5
const puppeteer = require("puppeteer");
async function launchWithSocks5() {
const browser = await puppeteer.launch({
args: [
"--proxy-server=socks5://proxy.example.com:1080",
"--no-sandbox",
"--window-size=1920,1080",
],
});
const page = await browser.newPage();
// Authenticate if needed
await page.authenticate({
username: "proxyuser",
password: "proxypass",
});
await page.goto("https://staging.example.com/qa-form", { waitUntil: "networkidle0" });
const sitekey = await page.evaluate(() =>
document.querySelector("[data-sitekey]")?.getAttribute("data-sitekey")
);
if (sitekey) {
const token = await solveCaptcha(page.url(), sitekey);
await page.evaluate((t) => {
document.querySelector("#g-recaptcha-response").value = t;
}, token);
}
await browser.close();
}
Melewati Proxy SOCKS5 ke CaptchaAI
CaptchaAI dapat menyelesaikan CAPTCHA dari IP proxy Anda:
def solve_with_proxy(site_url, sitekey, proxy_url):
"""Pass proxy to CaptchaAI for IP-matched solving."""
# Format: type:host:port:user:pass
proxy_param = f"socks5:{SOCKS5_HOST}:{SOCKS5_PORT}:{SOCKS5_USER}:{SOCKS5_PASS}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "SOCKS5",
"json": 1,
})
data = resp.json()
if data["status"] != 1:
raise Exception(f"Submit: {data['request']}")
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = resp.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Timeout")
Pemecahan Masalah
| Masalah | Penyebab | Solusi |
|---|---|---|
| Koneksi ditolak | Port atau host salah | Verifikasi server SOCKS5 sedang berjalan |
| Kebocoran DNS | Menggunakan socks5:// bukan socks5h:// |
Gunakan socks5h:// untuk DNS jarak jauh |
| Otentikasi gagal | Kredensial yang salah | Verifikasi dengan curl --socks5 |
| Koneksi lambat | Server proxy yang jauh | Pilih proxy yang secara geografis lebih dekat |
| WebSocket gagal | Server SOCKS5 tidak mendukung UDP | Gunakan server SOCKS5 dengan dukungan UDP |
Pertanyaan Umum
Kapan saya harus menggunakan SOCKS5 melalui proxy HTTP?
Gunakan SOCKS5 saat Anda perlu menangani lalu lintas WebSocket (umum di CAPTCHA modern), saat Anda ingin menghindari kebocoran header proxy, atau saat penyedia proxy Anda hanya menawarkan SOCKS5.
Apakah CaptchaAI mendukung SOCKS5 sebagai parameter proxy?
Ya. Berikan proxytype=SOCKS5 dan proxy=socks5:host:port:user:pass dalam request pengiriman Anda.
Apakah SOCKS5 lebih cepat dari proxy HTTP?
SOCKS5 memiliki overhead yang sedikit lebih sedikit (tidak ada penguraian HTTP) tetapi perbedaannya dapat diabaikan untuk alur kerja CAPTCHA. Keuntungan utamanya adalah mode standar.
Panduan Terkait
- Metode Otentikasi Proxy
- Memutar egress jaringan yang diotorisasi
- Kualitas Proxy Mempengaruhi Tingkat Solve
Gunakan proxy SOCKS5 dengan CaptchaAI untuk solve CAPTCHA yang lebih tersembunyi —dapatkan kunci API Anda.