Quay lại blog

Cách chẩn đoán nguyên nhân tỷ lệ thành công thấp

Tỷ lệ thành công của proxy là một chỉ số quan trọng đối với bất kỳ dự án nào. Hãy cùng tìm hiểu cách xác định nguyên nhân sự suy giảm và khôi phục hiệu quả.

📅3 tháng 12, 2025

Cách chẩn đoán nguyên nhân tỷ lệ thành công thấp: hướng dẫn từng bước

Tỷ lệ thành công — là phần trăm các yêu cầu thành công trên tổng số lần thử. Khi chỉ số này giảm dưới mức bình thường, bạn sẽ mất tiền, thời gian và dữ liệu. Nhưng có thể có hàng chục nguyên nhân: từ cấu hình không chính xác đến các khối từ máy chủ đích. Trong bài viết này, chúng ta sẽ tìm hiểu cách tiếp cận có hệ thống để chẩn đoán và tìm giải pháp.

Tỷ lệ thành công là gì và mức bình thường

Tỷ lệ thành công (SR) = (Yêu cầu thành công / Tổng số yêu cầu) × 100%

Các giá trị bình thường phụ thuộc vào loại nhiệm vụ:

Nhiệm vụ SR bình thường Mức tới hạn
Phân tích dữ liệu công khai 95–99% dưới 85%
Tự động hóa SMM 90–97% dưới 80%
Xác minh quảng cáo 98–99.5% dưới 95%
Tích hợp API 99–99.9% dưới 98%

Nếu SR giảm 5–10% so với đường cơ sở của bạn — đây là tín hiệu để chẩn đoán. Nếu giảm 20%+ — cần hành động ngay lập tức.

Các bước đầu tiên chẩn đoán

Bước 1: Kiểm tra nhật ký và chỉ số

Thu thập dữ liệu trong 24–72 giờ qua:

  • SR giảm chính xác lúc nào? (thời gian chính xác)
  • Bao nhiêu phần trăm yêu cầu trả về lỗi 407 (Proxy Authentication Required)?
  • Bao nhiêu phần trăm — 429 (Too Many Requests)?
  • Bao nhiêu phần trăm — hết thời gian chờ kết nối (connection timeout)?
  • Tải có thay đổi không (RPS — requests per second)?

Bước 2: Kiểm tra cách ly

Sử dụng tập lệnh đơn giản để kiểm tra proxy mà không cần ứng dụng của bạn:

import requests
import time

proxy = "http://proxy_ip:port"
proxies = {"http": proxy, "https": proxy}
target_url = "https://httpbin.org/ip"

success = 0
failed = 0

for i in range(100):
    try:
        response = requests.get(
            target_url, 
            proxies=proxies, 
            timeout=10,
            verify=False
        )
        if response.status_code == 200:
            success += 1
            print(f"✓ Lần thử {i+1}: thành công")
        else:
            failed += 1
            print(f"✗ Lần thử {i+1}: trạng thái {response.status_code}")
    except Exception as e:
        failed += 1
        print(f"✗ Lần thử {i+1}: {str(e)}")
    time.sleep(0.5)

sr = (success / (success + failed)) * 100
print(f"\nTỷ lệ thành công: {sr:.1f}%")
print(f"Thành công: {success}, Lỗi: {failed}")

Nếu bài kiểm tra này cho thấy SR bình thường — vấn đề nằm ở mã hoặc cấu hình của bạn. Nếu SR thấp ngay cả ở đây — vấn đề nằm ở proxy hoặc máy chủ đích.

Vấn đề phía proxy

Lỗi 407: Proxy Authentication Required

Nguyên nhân:

  • Thông tin đăng nhập không chính xác (tên đăng nhập/mật khẩu)
  • Tài khoản đã hết hạn
  • Địa chỉ IP không có trong danh sách cho phép (nếu cần)
  • Xoay IP không hoạt động hoặc bị tắt

Giải pháp:

import requests

# Định dạng chính xác cho proxy cư trú
proxy = "http://login:password@proxy-host:port"
proxies = {"http": proxy, "https": proxy}

# Kiểm tra
response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
print(response.text)

Máy chủ proxy bị quá tải

Nếu tất cả người dùng của dịch vụ gửi một lượng lớn yêu cầu cùng một lúc, có thể có giới hạn RPS (requests per second). Điều này hiếm gặp nhưng có thể xảy ra.

Kiểm tra:

  • RPS hiện tại của bạn ở mức cao nhất
  • Giới hạn của gói cước của bạn
  • Có lỗi 429 trong nhật ký không

Giải pháp: thêm độ trễ giữa các yêu cầu hoặc nâng cấp gói cước.

Chất lượng địa chỉ IP

Đối với proxy cư trú SR thấp có thể có nghĩa là bạn đang xoay các địa chỉ bị chặn. Kiểm tra:

  • Bao nhiêu phần trăm địa chỉ IP trả về 403 Forbidden?
  • Các địa chỉ giống nhau có lặp lại không?
  • Có mô hình nào không — một quốc gia/khu vực hoạt động, quốc gia khác không?

Các khối và bộ lọc của máy chủ đích

Lỗi 429: Too Many Requests

Máy chủ đích thấy quá nhiều yêu cầu từ một IP hoặc nói chung. Giải pháp:

  • Thêm độ trễ: `time.sleep(random.uniform(1, 3))`
  • Sử dụng xoay IP: mỗi yêu cầu — IP mới
  • Giảm RPS: gửi yêu cầu tuần tự, không song song
  • Thêm tiêu đề thực tế: User-Agent, Referer, Accept-Language

Lỗi 403 Forbidden

Máy chủ đã chặn IP của bạn (hoặc IP proxy). Điều này có thể là:

  • Bộ lọc theo địa chỉ địa lý
  • Danh sách đen dịch vụ proxy
  • Bộ phát hiện bot (JavaScript, CAPTCHA)

Giải pháp: sử dụng proxy di động hoặc proxy cư trú với xoay IP. Chúng khó bị chặn hơn.

Lỗi 403: Kiểm tra User-Agent

Một số dịch vụ từ chối yêu cầu có User-Agent đáng ngờ:

import requests
import random

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
    "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15"
]

headers = {
    "User-Agent": random.choice(user_agents),
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml",
    "Referer": "https://google.com"
}

response = requests.get(
    "https://target-site.com",
    headers=headers,
    proxies={"http": proxy, "https": proxy},
    timeout=10
)
print(response.status_code)

Lỗi trong mã khách hàng

Xử lý ngoại lệ không chính xác

Lỗi phổ biến: mã coi lỗi kết nối là yêu cầu không thành công, nhưng không cố gắng kết nối lại:

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# Cách chính xác với retries
session = requests.Session()
retry_strategy = Retry(
    total=3,
    backoff_factor=1,
    status_forcelist=[429, 500, 502, 503, 504],
    allowed_methods=["GET", "POST"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)

try:
    response = session.get(url, proxies=proxies, timeout=10)
except requests.exceptions.RequestException as e:
    print(f"Lỗi: {e}")
    # Ghi nhật ký và chuyển sang yêu cầu tiếp theo

Hết thời gian chờ không chính xác

Nếu hết thời gian chờ quá ngắn (1–2 giây), proxy chậm sẽ bị từ chối:

  • Để phân tích thông thường: 10–30 giây
  • Để proxy di động: 15–45 giây
  • Để API: 5–10 giây

Lỗi SSL/TLS

Nếu sử dụng `verify=False`, điều này có thể che giấu các vấn đề thực sự. Tốt hơn là cập nhật chứng chỉ:

import requests
import certifi

# Chính xác
response = requests.get(
    url,
    proxies=proxies,
    verify=certifi.where(),  # Thay vì verify=False
    timeout=15
)

Vấn đề mạng và hết thời gian chờ

Connection timeout vs Read timeout

Sự khác biệt rất quan trọng:

  • Connection timeout: proxy không phản hồi (vấn đề proxy hoặc mạng)
  • Read timeout: máy chủ đích gửi dữ liệu chậm (vấn đề máy chủ đích)
import requests

# timeout = (connection_timeout, read_timeout)
try:
    response = requests.get(
        url,
        proxies=proxies,
        timeout=(5, 15)  # 5 giây để kết nối, 15 để đọc
    )
except requests.exceptions.ConnectTimeout:
    print("Proxy không phản hồi")
except requests.exceptions.ReadTimeout:
    print("Máy chủ đích chậm")

Vấn đề DNS

Nếu máy chủ đích không phân giải, đây không phải là lỗi proxy:

import socket

# Kiểm tra DNS ngoài proxy
try:
    ip = socket.gethostbyname("target-site.com")
    print(f"Phân giải được: {ip}")
except socket.gaierror:
    print("Lỗi DNS — không tìm thấy trang web")

Danh sách kiểm tra chẩn đoán SR thấp

  1. Thiết lập đường cơ sở: SR bình thường trước đây là bao nhiêu?
  2. Chạy bài kiểm tra cách ly (tập lệnh ở trên) với 100 yêu cầu
  3. Kiểm tra nhật ký: mã HTTP nào chiếm ưu thế? (407, 429, 403, hết thời gian chờ?)
  4. Nếu 407: kiểm tra tên đăng nhập/mật khẩu và danh sách cho phép IP
  5. Nếu 429: thêm độ trễ giữa các yêu cầu, sử dụng xoay IP
  6. Nếu 403: kiểm tra User-Agent, Referer, thêm tiêu đề thực tế
  7. Nếu hết thời gian chờ: tăng timeout, kiểm tra RPS, sử dụng logic retry
  8. Kiểm tra mã của bạn: xử lý ngoại lệ chính xác, hết thời gian chờ chính xác
  9. Kiểm tra máy chủ đích: có thể truy cập được không (không có proxy)?
  10. Nếu tất cả không giúp được: hãy thử loại proxy khác hoặc nhà cung cấp khác

Bảng chẩn đoán nhanh

Mã HTTP Nguyên nhân có thể Giải pháp
407 Thông tin đăng nhập proxy không chính xác Kiểm tra tên đăng nhập/mật khẩu, danh sách cho phép IP
429 Quá nhiều yêu cầu Thêm độ trễ, sử dụng xoay IP
403 IP bị chặn hoặc bộ phát hiện bot Thêm tiêu đề thực tế, sử dụng proxy di động
Timeout Proxy chậm hoặc máy chủ đích bị quá tải Tăng timeout, kiểm tra RPS
Connection refused Máy chủ proxy không thể truy cập được Kiểm tra IP:port, trạng thái proxy

Kết luận

SR thấp — đây là triệu chứng, không phải bệnh. Có thể có nhiều nguyên nhân: từ lỗi đánh máy trong mã đến bị chặn bởi máy chủ đích. Chẩn đoán có hệ thống — chìa khóa để giải quyết:

  1. Kiểm tra chỉ số và nhật ký
  2. Cách ly vấn đề (proxy vs máy chủ đích vs mã của bạn)
  3. Xác định loại lỗi (407, 429, 403, timeout)
  4. Áp dụng giải pháp tương ứng

Đối với các nhiệm vụ yêu cầu độ tin cậy cao và SR cao, nên sử dụng proxy cư trú với xoay IP. Chúng khó bị phát hiện hơn và ổn định hơn. Hãy thử bài kiểm tra miễn phí trên proxycove.com và kiểm tra trên nhiệm vụ của bạn.