Hướng Dẫn API

SOCKS5 Proxy + CaptchaAI: Hướng dẫn thiết lập và cấu hình

Proxy SOCKS5 hoạt động ở cấp độ mạng thấp hơn proxy HTTP — chúng xử lý mọi loại lưu lượng truy cập (HTTP, HTTPS, FTP, UDP) mà không sửa đổi yêu cầu. Điều này khiến chúng khó phát hiện hơn và lý tưởng cho các trang web được bảo vệ CAPTCHA. Hướng dẫn này đề cập đến việc thiết lập SOCKS5 trên Python, Node.js và các công cụ tự động hóa trình duyệt.


SOCKS5 so với HTTP Proxy

tính năng Proxy HTTP/HTTPS Proxy SOCKS5
Hỗ trợ giao thức Chỉ HTTP/HTTPS Bất kỳ TCP/UDP nào
Sửa đổi tiêu đề Có thể thêm X-Forwarded-For Không sửa đổi
Phát hiện Dễ dàng hơn (rò rỉ tiêu đề) Khó hơn
Tốc độ Nhanh Chậm hơn một chút
Xác thực Cơ bản/Digest Tên người dùng/password
Độ phân giải DNS Phía khách hàng Phía máy chủ (SOCKS5h)
Hỗ trợ WebSocket bị giới hạn Đầy đủ

Cài đặt Python

yêu cầu + 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"))

Selen + 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("")
    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_options.add_argument("")

    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");
}

Puppeteer + TẤT5

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();
}

Chuyển proxy SOCKS5 tới CaptchaAI

CaptchaAI có thể giải CAPTCHA từ IP proxy của bạn:

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")

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
Kết nối bị từ chối Cổng hoặc máy chủ sai Xác minh máy chủ SOCKS5 đang chạy
rò rỉ DNS Sử dụng socks5:// thay vì socks5h:// Sử dụng socks5h:// cho DNS từ xa
Xác thực không thành công Thông tin xác thực sai Xác minh bằng curl --socks5
Kết nối chậm Máy chủ proxy ở xa Chọn proxy gần hơn về mặt địa lý
WebSocket không thành công Máy chủ SOCKS5 không hỗ trợ UDP Sử dụng máy chủ SOCKS5 có hỗ trợ UDP

Câu hỏi thường gặp

Khi nào tôi nên sử dụng SOCKS5 qua proxy HTTP?

Sử dụng SOCKS5 khi bạn cần xử lý lưu lượng truy cập WebSocket (phổ biến trong CAPTCHA hiện đại), khi bạn muốn tránh rò rỉ tiêu đề proxy hoặc khi nhà cung cấp proxy của bạn chỉ cung cấp SOCKS5.

CaptchaAI có hỗ trợ SOCKS5 làm tham số proxy không?

Vâng. Chuyển proxytype=SOCKS5proxy=socks5:host:port:user:pass trong yêu cầu gửi của bạn.

SOCKS5 có nhanh hơn proxy HTTP không?

SOCKS5 có ít chi phí hơn một chút (không có phân tích cú pháp HTTP) nhưng sự khác biệt là không đáng kể đối với quy trình làm việc của CAPTCHA. Ưu điểm chính là tàng hình.


Hướng dẫn liên quan


Sử dụng proxy SOCKS5 với CaptchaAI để giải CAPTCHA lén lút hơn —lấy khóa API của bạn.

Os comentários estão desativados para este artigo.