Quay lại blog

Lỗi Proxy Không Hỗ Trợ Giao Thức Cần Thiết: Cách Khắc Phục

Phân tích nguyên nhân proxy không tương thích với các giao thức và giải pháp thực tế: từ thiết lập bộ chuyển đổi cục bộ đến chọn đúng loại proxy.

📅9 tháng 12, 2025

Proxy không hỗ trợ giao thức cần thiết: phải làm gì

Bạn đã thiết lập proxy, chạy script — và nhận được lỗi "Protocol not supported" hoặc "Connection refused". Vấn đề không tương thích giao thức xảy ra thường xuyên hơn bạn nghĩ. Hãy cùng tìm hiểu tại sao điều này xảy ra và cách giải quyết vấn đề mà không cần thay đổi nhà cung cấp.

Các giao thức được proxy sử dụng

Trước khi giải quyết vấn đề, điều quan trọng là phải hiểu sự khác biệt giữa các giao thức. Mỗi giao thức có lĩnh vực ứng dụng và giới hạn riêng.

Giao thức Cổng mặc định Đặc điểm
HTTP 80, 8080, 3128 Chỉ lưu lượng HTTP, có thể sửa đổi tiêu đề
HTTPS (CONNECT) 443, 8443 Tạo đường hầm qua HTTP CONNECT, mã hóa
SOCKS4 1080 Kết nối TCP, không xác thực, không có UDP
SOCKS5 1080, 1081 TCP và UDP, xác thực, DNS qua proxy

Các xung đột điển hình:

  • Selenium và Puppeteer yêu cầu HTTP/HTTPS, nhưng bạn lại có SOCKS5
  • Telegram bot hoạt động qua SOCKS5, nhưng proxy chỉ hỗ trợ HTTP
  • Ứng dụng Torrent yêu cầu SOCKS5 với UDP, nhưng proxy là SOCKS4
  • Ứng dụng trò chơi yêu cầu UDP, nhưng proxy HTTP không hỗ trợ nó

Chẩn đoán: xác định giao thức proxy

Nếu nhà cung cấp không nêu rõ giao thức hoặc bạn không chắc chắn, hãy tự kiểm tra proxy.

Kiểm tra bằng curl

Kiểm tra giao thức HTTP:

# Proxy HTTP
curl -x http://proxy_ip:port http://httpbin.org/ip

# Có xác thực
curl -x http://user:pass@proxy_ip:port http://httpbin.org/ip

Kiểm tra SOCKS5:

# Proxy SOCKS5
curl -x socks5://proxy_ip:port http://httpbin.org/ip

# SOCKS5 với DNS qua proxy (socks5h)
curl -x socks5h://proxy_ip:port http://httpbin.org/ip

Nếu lệnh trả về địa chỉ IP của proxy — giao thức đã được xác định chính xác. Lỗi Connection refused hoặc Unsupported proxy — giao thức không đúng.

Kiểm tra bằng Python

import requests

proxy_ip = "proxy_ip:port"

# Kiểm tra HTTP
try:
    r = requests.get("http://httpbin.org/ip", 
                     proxies={"http": f"http://{proxy_ip}"}, 
                     timeout=10)
    print(f"HTTP hoạt động: {r.json()}")
except Exception as e:
    print(f"HTTP không hoạt động: {e}")

# Kiểm tra SOCKS5 (yêu cầu pip install requests[socks])
try:
    r = requests.get("http://httpbin.org/ip", 
                     proxies={"http": f"socks5://{proxy_ip}"}, 
                     timeout=10)
    print(f"SOCKS5 hoạt động: {r.json()}")
except Exception as e:
    print(f"SOCKS5 không hoạt động: {e}")

Tự động phát hiện

Script để duyệt qua các giao thức:

import requests

def detect_protocol(proxy_address):
    protocols = ["http", "https", "socks4", "socks5", "socks5h"]
    
    for proto in protocols:
        try:
            proxies = {
                "http": f"{proto}://{proxy_address}",
                "https": f"{proto}://{proxy_address}"
            }
            r = requests.get("http://httpbin.org/ip", 
                           proxies=proxies, timeout=5)
            if r.status_code == 200:
                return proto
        except:
            continue
    return None

result = detect_protocol("proxy_ip:port")
print(f"Giao thức phát hiện: {result}")

Chuyển đổi HTTP sang SOCKS và ngược lại

Nếu proxy hỗ trợ không đúng giao thức mà phần mềm của bạn cần, hãy sử dụng bộ chuyển đổi cục bộ.

Privoxy: HTTP → SOCKS

Privoxy nhận các yêu cầu HTTP và chuyển chúng qua proxy SOCKS.

Cài đặt:

# Ubuntu/Debian
sudo apt install privoxy

# macOS
brew install privoxy

# Windows — tải về từ trang web chính thức

Cấu hình (tệp /etc/privoxy/config):

# Lắng nghe trên cổng cục bộ 8118 (HTTP)
listen-address 127.0.0.1:8118

# Chuyển tiếp qua SOCKS5 bên ngoài
forward-socks5 / socks_proxy_ip:1080 .

# Có xác thực
forward-socks5 / user:pass@socks_proxy_ip:1080 .

Bây giờ phần mềm của bạn kết nối tới 127.0.0.1:8118 qua HTTP, và lưu lượng được chuyển qua SOCKS5.

Gost: bộ chuyển đổi đa năng

Gost là một công cụ mạnh mẽ cho mọi loại chuyển đổi giao thức.

# Proxy HTTP đầu vào → SOCKS5 đầu ra
gost -L http://:8080 -F socks5://socks_proxy_ip:1080

# SOCKS5 đầu vào → HTTP đầu ra
gost -L socks5://:1080 -F http://http_proxy_ip:8080

# Có xác thực ở cả hai đầu
gost -L http://local_user:local_pass@:8080 \
     -F socks5://remote_user:remote_pass@proxy_ip:1080

Bộ chuyển đổi bằng Python

Bộ chuyển đổi tối giản cho các tác vụ đơn giản:

# pip install pproxy
# HTTP đầu vào, SOCKS5 đầu ra
pproxy -l http://:8080 -r socks5://proxy_ip:1080

# SOCKS5 đầu vào, HTTP đầu ra  
pproxy -l socks5://:1080 -r http://proxy_ip:8080

Thiết lập đường hầm cục bộ

Đôi khi việc chuyển đổi là không đủ — cần có một đường hầm đầy đủ.

Đường hầm SSH qua proxy HTTP

Nếu bạn có máy chủ SSH và proxy HTTP, bạn có thể tạo SOCKS5:

# Tạo SOCKS5 trên localhost:1080 qua proxy HTTP
ssh -D 1080 -o ProxyCommand="nc -X connect -x http_proxy:8080 %h %p" user@ssh_server

Stunnel cho HTTPS

Nếu bạn cần proxy HTTPS nhưng chỉ có HTTP:

# stunnel.conf
[https-proxy]
client = yes
accept = 127.0.0.1:8443
connect = http_proxy_ip:8080
protocol = connect
protocolHost = target_host:443

Cấu hình phần mềm theo giao thức khả dụng

Đôi khi việc cấu hình phần mềm theo giao thức hiện có sẽ dễ dàng hơn là chuyển đổi.

Selenium với các giao thức khác nhau

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# Proxy HTTP (cách tiêu chuẩn)
options = Options()
options.add_argument('--proxy-server=http://proxy_ip:8080')

# Proxy SOCKS5
options.add_argument('--proxy-server=socks5://proxy_ip:1080')

# Đối với Firefox với SOCKS5
from selenium.webdriver.firefox.options import Options as FirefoxOptions
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.socks", "proxy_ip")
profile.set_preference("network.proxy.socks_port", 1080)
profile.set_preference("network.proxy.socks_version", 5)

aiohttp với SOCKS

# pip install aiohttp-socks
import aiohttp
from aiohttp_socks import ProxyConnector

async def fetch_with_socks():
    connector = ProxyConnector.from_url('socks5://proxy_ip:1080')
    async with aiohttp.ClientSession(connector=connector) as session:
        async with session.get('http://httpbin.org/ip') as response:
            return await response.json()

Telegram bot qua HTTP

Nếu thư viện Telegram yêu cầu SOCKS5, nhưng bạn có HTTP:

# python-telegram-bot với proxy HTTP
from telegram.ext import ApplicationBuilder

application = (
    ApplicationBuilder()
    .token("YOUR_TOKEN")
    .proxy_url("http://proxy_ip:8080")  # Hoạt động với HTTP
    .build()
)

Mẹo: Nhiều thư viện hiện đại hỗ trợ cả hai giao thức. Hãy kiểm tra tài liệu — có thể bạn chỉ cần thay đổi lược đồ URL từ socks5:// thành http://.

Cách chọn proxy với giao thức cần thiết

Để tránh các vấn đề về giao thức, hãy xác định yêu cầu trước.

Ma trận tương thích

Nhiệm vụ Giao thức khuyến nghị Lý do
Web scraping HTTP/HTTPS Hỗ trợ rộng rãi, thiết lập đơn giản
Tự động hóa trình duyệt HTTP hoặc SOCKS5 Phụ thuộc vào trình duyệt và framework
Telegram, Discord bot SOCKS5 Yêu cầu của các thư viện
Torrent SOCKS5 với UDP DHT và PEX sử dụng UDP
Trò chơi, VoIP SOCKS5 với UDP Độ trễ thấp, lưu lượng UDP
Yêu cầu API HTTP/HTTPS REST API hoạt động qua HTTP

Những điều cần xem xét khi chọn nhà cung cấp

  • Danh sách các giao thức được hỗ trợ — phải được nêu rõ ràng
  • Khả năng chuyển đổi — một số nhà cung cấp cho phép truy cập cùng một IP thông qua các cổng/giao thức khác nhau
  • Hỗ trợ UDP cho SOCKS5 — không phải tất cả proxy SOCKS5 đều hỗ trợ UDP
  • Tài liệu hướng dẫn thiết lập — ví dụ cho các ngôn ngữ và công cụ khác nhau

Proxy dân cư (Residential proxies) thường hỗ trợ HTTP/HTTPS và SOCKS5 đồng thời, loại bỏ hầu hết các vấn đề tương thích. Proxy trung tâm dữ liệu (Datacenter proxies) thường bị giới hạn ở HTTP/HTTPS.

Danh sách kiểm tra trước khi mua

  1. Xác định giao thức mà phần mềm của bạn yêu cầu
  2. Kiểm tra xem có cần UDP không (trò chơi, torrent, VoIP)
  3. Hỏi nhà cung cấp về việc hỗ trợ giao thức cần thiết
  4. Yêu cầu quyền truy cập thử nghiệm để kiểm tra khả năng tương thích
  5. Chuẩn bị kế hoạch dự phòng — bộ chuyển đổi cục bộ

Kết luận

Vấn đề không tương thích giao thức là một vấn đề có thể giải quyết được. Trong hầu hết các trường hợp, chỉ cần một bộ chuyển đổi cục bộ như Privoxy hoặc Gost là đủ. Đối với các dự án dài hạn, việc chọn proxy hỗ trợ giao thức cần thiết ngay từ đầu sẽ kinh tế hơn.

Đối với các tác vụ đòi hỏi sự linh hoạt trong lựa chọn giao thức, proxy dân cư với quyền truy cập đa giao thức là phù hợp — tìm hiểu thêm tại proxycove.com.