Tại sao một số trang web không mở được qua proxy: hướng dẫn đầy đủ
Proxy là một công cụ không thể thiếu cho web scraping, kiểm tra, tự động hóa SMM và vượt qua các hạn chế địa lý. Nhưng đôi khi thay vì nội dung, bạn sẽ thấy lỗi 403, timeout hoặc trang trống. Hãy cùng tìm hiểu tại sao điều này xảy ra và cách khắc phục.
1. Phát hiện và chặn proxy
Đây là nguyên nhân phổ biến nhất. Các ứng dụng web hiện đại sử dụng các dịch vụ đặc biệt để phát hiện lưu lượng proxy. Trang web phân tích:
- ASN (Autonomous System Number) — nhiều nhà cung cấp proxy sử dụng các dải ASN được biết đến, dễ dàng bị chặn
- Hành vi người dùng — chuyển đổi IP nhanh chóng không thể, thiếu cookies, các mẫu nhấp chuột lạ
- Dấu vân tay TLS — trình duyệt gửi dữ liệu duy nhất về phiên bản SSL, tiện ích mở rộng, thứ tự mã hóa
- Dấu vân tay WebGL và Canvas — thậm chí JavaScript cũng có thể tiết lộ việc sử dụng proxy
Ví dụ: Trang web thấy rằng 100 trang sản phẩm đã được tải trong 10 giây từ IP của bạn. Rõ ràng đây không phải là một người — chặn là không thể tránh khỏi.
2. Hạn chế địa lý
Trang web kiểm tra vị trí địa lý của IP và từ chối truy cập nếu nó không phù hợp với kỳ vọng:
- Các ngân hàng và dịch vụ tài chính chặn quyền truy cập từ các quốc gia nhất định
- Các dịch vụ phát trực tuyến (Netflix, YouTube) hạn chế nội dung theo khu vực
- Các trang web chính phủ có thể không thể truy cập từ bên ngoài
- Các nền tảng thương mại điện tử thay đổi ngôn ngữ và tiền tệ dựa trên IP
Nếu bạn sử dụng proxy trung tâm dữ liệu từ Hoa Kỳ, nhưng trang web yêu cầu quyền truy cập chỉ từ Châu Âu — bạn sẽ nhận được lỗi 403 hoặc chuyển hướng.
3. Danh tiếng địa chỉ IP
Mỗi IP đều có lịch sử. Nếu địa chỉ đã được sử dụng trước đó cho spam, phân tích cú pháp hoặc các cuộc tấn công DDoS, các trang web sẽ chặn nó:
- Danh sách đen — IP rơi vào cơ sở dữ liệu Project Honey Pot, Spamhaus, AbuseIPDB
- Điểm số thấp trong các dịch vụ như IPQualityScore — các trang web sử dụng các dịch vụ như vậy để lọc
- Vi phạm trước đó — nếu IP đã bị chặn trên trang web, nó có thể vẫn nằm trong danh sách đen trong thời gian dài
Bạn có thể kiểm tra danh tiếng IP trên abuseipdb.com hoặc ipqualityscore.com.
4. Tiêu đề và cấu hình không chính xác
Thường xuyên các trang web chặn yêu cầu do thiếu hoặc sai tiêu đề HTTP:
| Tiêu đề | Vấn đề |
|---|---|
User-Agent |
Thiếu hoặc lạ (như Python-requests/2.25.1) |
Referer |
Không khớp với logic điều hướng trang web |
Accept-Language |
Thiếu hoặc không khớp với vị trí địa lý IP |
X-Forwarded-For |
Tiết lộ việc sử dụng proxy hoặc VPN |
Giải pháp: Sử dụng tiêu đề trình duyệt thực. Đây là ví dụ trên Python:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1'
}
proxy = 'http://your-proxy:port'
response = requests.get('https://example.com',
headers=headers,
proxies={'http': proxy, 'https': proxy})
5. Vấn đề về giao thức và cổng
Một số proxy chỉ hỗ trợ HTTP, nhưng bạn đang cố gắng truy cập vào trang web HTTPS. Hoặc cổng bị chặn ở cấp độ mạng:
- HTTP vs HTTPS — đảm bảo rằng proxy hỗ trợ cả hai giao thức
- Cổng — tiêu chuẩn 80 (HTTP) và 443 (HTTPS), nhưng một số trang web sử dụng cổng không chuẩn
- SOCKS vs HTTP — các loại proxy khác nhau có những hạn chế khác nhau
Mẹo: Nếu trang web không mở được qua proxy HTTP, hãy thử SOCKS5. Nó hoạt động ở cấp độ thấp hơn và tốt hơn trong việc vượt qua một số hạn chế.
6. Giới hạn tốc độ và bảo vệ DDoS
Nếu bạn thực hiện nhiều yêu cầu liên tiếp, ngay cả qua các IP khác nhau, trang web có thể chặn bạn:
- 429 Too Many Requests — bạn đã vượt quá giới hạn yêu cầu
- Chặn tạm thời — thường là 1-24 giờ
- Chặn vĩnh viễn — nếu bạn tiếp tục tấn công máy chủ
- Cloudflare, WAF — các hệ thống bảo vệ chuyên dụng phân biệt bot với con người
7. Giải pháp thực tế
✓ Sử dụng proxy dân cư thay vì trung tâm dữ liệu
Proxy dân cư là các địa chỉ IP thực của người dùng nhà. Chúng khó phát hiện hơn nhiều vì trông giống như lưu lượng bình thường. Các trung tâm dữ liệu thường bị chặn vì ASN của chúng được biết đến.
✓ Thêm độ trễ giữa các yêu cầu
import time
import random
for url in urls:
response = requests.get(url, headers=headers, proxies=proxies)
# Độ trễ ngẫu nhiên từ 1 đến 5 giây
time.sleep(random.uniform(1, 5))
✓ Xoay vòng proxy
Không sử dụng một IP cho tất cả các yêu cầu. Chuyển đổi giữa các địa chỉ khác nhau:
proxies_list = [
'http://proxy1:port',
'http://proxy2:port',
'http://proxy3:port',
]
for i, url in enumerate(urls):
proxy = proxies_list[i % len(proxies_list)]
response = requests.get(url, proxies={'http': proxy, 'https': proxy})
✓ Kiểm tra IP trước khi sử dụng
Đảm bảo rằng IP không nằm trong danh sách đen:
import requests
def check_ip_reputation(ip):
response = requests.get(f'https://ipqualityscore.com/api/json/ip/{ip}')
data = response.json()
return data.get('fraud_score', 0)
# Chỉ sử dụng IP có điểm số thấp
if check_ip_reputation(proxy_ip) < 75:
# IP an toàn
pass
✓ Sử dụng tự động hóa trình duyệt cho các trang web phức tạp
Nếu trang web sử dụng JavaScript và bảo vệ phức tạp, các yêu cầu HTTP thông thường sẽ không giúp ích. Sử dụng Selenium hoặc Puppeteer:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://proxy:port')
driver = webdriver.Chrome(options=options)
driver.get('https://example.com')
✓ Sử dụng proxy di động cho các trang web di động
Proxy di động hoạt động thông qua các mạng di động thực (4G/5G). Chúng đáng tin cậy hơn cho các ứng dụng di động và thường không bị chặn bởi các trang web hạn chế quyền truy cập cho PC.
✓ Xử lý lỗi một cách chính xác
try:
response = requests.get(url, proxies=proxies, timeout=10)
response.raise_for_status()
except requests.exceptions.ProxyError:
print("Lỗi proxy — IP có thể bị chặn")
except requests.exceptions.Timeout:
print("Timeout — máy chủ không phản hồi")
except requests.exceptions.HTTPError as e:
if response.status_code == 403:
print("Quyền truy cập bị từ chối — hãy thử proxy khác")
Tóm tắt
Các trang web chặn proxy vì nhiều lý do: từ phát hiện các mẫu lưu lượng đến danh tiếng IP đơn giản. Không có giải pháp phổ quát, nhưng sự kết hợp của các proxy tốt, tiêu đề chính xác, độ trễ và xoay vòng IP sẽ giải quyết hầu hết các vấn đề.
Để phân tích cú pháp và tự động hóa nên sử dụng proxy dân cư chất lượng cao, trông giống như lưu lượng thực từ người dùng nhà. Chúng đắt hơn các trung tâm dữ liệu, nhưng hoạt động đáng tin cậy hơn và hiếm khi bị chặn.