Gặp ERROR_PAGEURL dù URL trông có vẻ đúng? Trước khi đào sâu, kiểm tra nhanh ba điều sau — phần lớn trường hợp được xử lý ngay ở bước này vì CaptchaAI xác thực token theo đúng domain gốc, lệch một ký tự là bị từ chối.
- Giao thức:
pageurlđã bắt đầu bằnghttps://chưa, hay thiếu hẳn? - Domain: bạn gửi đúng bản
wwwhoặc không-wwwmà trình duyệt đang hiển thị chưa? - Thời điểm: đây có phải URL tại đúng lúc CAPTCHA xuất hiện, hay là URL trước khi trang chuyển hướng?
6 nguyên nhân phổ biến khiến pageurl bị từ chối
- Thiếu giao thức — gửi
example.comthay vìhttps://example.com - Sai tên miền — nhầm
www.example.comvớiexample.com - Redirect đổi URL — biểu mẫu tại
/loginbị chuyển hướng sang/auth/login - Route SPA không khớp — route JS
/app/loginkhông trùng URL máy chủ trả về - URL chưa mã hoá — dấu cách hoặc ký tự đặc biệt chưa được encode
- Iframe khác domain — CAPTCHA được tải từ một tên miền phụ khác trang chính
Một đội QA tại TP.HCM từng gặp đúng lỗi đầu tiên: script kiểm thử form đăng ký gửi pageurl thiếu https://, khiến toàn bộ token bị từ chối cho tới khi thêm đúng giao thức.
Mẹo: copy nguyên văn URL từ thanh địa chỉ trình duyệt, đừng gõ lại bằng tay — một dấu gạch chéo thừa hoặc thiếu cũng đủ gây
ERROR_PAGEURL.
Quy tắc duy nhất bạn cần nhớ khi lấy pageurl
Luôn dùng đúng URL hiển thị trên thanh địa chỉ trình duyệt tại thời điểm CAPTCHA xuất hiện — không phải URL bạn nghĩ trang sẽ có, không phải endpoint mà form gửi tới.
# WRONG — incomplete URL
pageurl = "staging.example.com/qa-login"
# WRONG — wrong protocol
pageurl = "https://staging.example.com/qa-login"
# CORRECT — full URL with protocol
pageurl = "https://staging.example.com/qa-login"
# CORRECT — with www if that's what the page uses
pageurl = "https://staging.example.com/qa-login"
Viết hàm kiểm tra pageurl trước khi gửi request
Chặn lỗi này trước khi gửi request bằng một hàm validate đơn giản:
from urllib.parse import urlparse
def validate_pageurl(url):
"""Validate pageurl before API submission."""
parsed = urlparse(url)
if not parsed.scheme:
raise ValueError(f"Missing protocol: {url}. Use https://")
if parsed.scheme not in ("http", "https"):
raise ValueError(f"Invalid protocol: {parsed.scheme}")
if not parsed.netloc:
raise ValueError(f"Missing domain: {url}")
# Remove fragment (hash) — not sent to server
clean = f"{parsed.scheme}://{parsed.netloc}{parsed.path}"
if parsed.query:
clean += f"?{parsed.query}"
return clean
# Usage
url = validate_pageurl("https://staging.example.com/qa-login#section")
# Returns: "https://staging.example.com/qa-login"
Gọi hàm này ở ba chỗ để chặn lỗi sớm nhất có thể:
- Ngay trước mỗi lần gọi
in.phptrong pipeline tự động hoá - Sau khi trích xuất URL động từ DOM hoặc router phía client
- Trong bước kiểm thử CI, để chặn cấu hình sai trước khi chạy thật
Theo dõi redirect trước khi gửi pageurl
Nếu trang chuyển hướng sau khi tải, pageurl phải là URL cuối cùng, không phải URL gõ vào ban đầu:
import requests
def get_final_url(url):
"""Follow redirects to get the actual page URL."""
resp = requests.get(url, allow_redirects=True, timeout=15)
return resp.url
# If the login page redirects
original = "https://staging.example.com/qa-login"
final = get_final_url(original)
print(f"Final URL: {final}")
# Use final URL as pageurl
SPA (Single Page Application): lấy route nào?
SPA đổi URL bằng JavaScript mà không tải lại trang. CaptchaAI cần domain hiển thị trên thanh địa chỉ, không phải endpoint API mà form gọi ngầm:
# For SPAs, use the domain root + the route shown in the address bar
# NOT the API endpoint that the form submits to
# WRONG — API endpoint
pageurl = "https://api.example.com/v1/auth/login"
# CORRECT — the page URL shown in browser
pageurl = "https://staging.example.com/qa-login"
CAPTCHA trong iframe: dùng URL trang chính, không phải iframe src
Khi CAPTCHA tải trong iframe từ domain khác, pageurl vẫn phải là URL trang chính:
# If the CAPTCHA is on the MAIN page
pageurl = "https://example.com/register" # Main page URL
# If the CAPTCHA is in an IFRAME with a different domain
# Still use the main page URL, not the iframe src
pageurl = "https://example.com/register"
# NOT: "https://captcha-frame.example.com/challenge"
Quy tắc:
pageurlluôn là URL của trang cha (top-level) mà người dùng đang xem, bất kể CAPTCHA render bên trong iframe nào.
Gửi request hoàn chỉnh tới in.php
Ghép validate_pageurl() vào request thật trước khi gửi:
import requests
# Validate URL first
pageurl = validate_pageurl("https://staging.example.com/qa-login")
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": "SITE_KEY",
"pageurl": pageurl,
"json": 1,
})
result = resp.json()
if result.get("status") == 1:
print(f"Task ID: {result['request']}")
else:
print(f"Error: {result.get('request')}")
Phân biệt ERROR_PAGEURL với các mã lỗi khác
ERROR_PAGEURL thường bị nhầm với các lỗi tham số khác. Bảng dưới đây giúp xác định đúng nguyên nhân trước khi sửa sai chỗ:
| Mã lỗi | Nguyên nhân | Khác gì với ERROR_PAGEURL |
|---|---|---|
| ERROR_PAGEURL | pageurl sai định dạng hoặc không khớp domain |
— |
| ERROR_WRONG_GOOGLEKEY | googlekey/sitekey sai hoặc rỗng |
Liên quan tham số googlekey, không phải pageurl |
| ERROR_WRONG_USER_KEY | API key không hợp lệ |
Liên quan xác thực tài khoản, không phải URL |
| ERROR_BAD_PARAMETERS | Thiếu tham số bắt buộc trong request | Có thể xảy ra cùng lúc — kiểm tra toàn bộ payload |
Bảng tra cứu nhanh: triệu chứng → nguyên nhân → cách xử lý
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
| Lỗi mặc dù URL trông chính xác | www và không phải www không khớp | Kiểm tra chính xác thanh địa chỉ |
| URL đôi khi hoạt động, đôi khi không thành công | Trang có URL thử nghiệm A/B | Chụp URL tại thời điểm giải quyết |
| Token đã giải nhưng bị trang web từ chối | Domain pageurl không khớp | Domain token phải khớp domain trang web |
| Hoạt động trong trình duyệt nhưng không có mã | Chuyển hướng không được theo dõi | Sử dụng get_final_url() |
| URL có tham số truy vấn | Các tham số có thể được yêu cầu | Bao gồm các tham số truy vấn cần thiết |
Câu hỏi thường gặp về ERROR_PAGEURL
pageurl chỉ cần đúng domain hay phải đúng toàn bộ đường dẫn?
Domain là phần bắt buộc để CaptchaAI xác thực token. Tuy nhiên nên gửi đủ đường dẫn vì một số trang xác thực cả URL đầy đủ, không chỉ domain gốc.
Có nên giữ lại tham số truy vấn trong pageurl không?
Giữ lại nếu chúng thuộc URL hiển thị trên trình duyệt. Có thể bỏ tham số theo dõi như utm_source.
ERROR_PAGEURL có phải do sai API key hoặc sitekey không?
Không. ERROR_PAGEURL chỉ liên quan đến pageurl — sai key hoặc googlekey trả về mã lỗi khác (ERROR_WRONG_USER_KEY, ERROR_WRONG_GOOGLEKEY).
Trang chạy qua CDN hoặc proxy thì pageurl phải lấy theo domain nào?
Luôn lấy domain người dùng thấy trên thanh địa chỉ trình duyệt, không phải domain gốc phía sau CDN — CaptchaAI xác thực theo URL hiển thị công khai.
pageurl có cần trùng khớp chữ hoa/chữ thường không?
Domain không phân biệt hoa thường theo chuẩn DNS, nhưng đường dẫn (path) có thể phân biệt hoa thường tuỳ cấu hình server — an toàn nhất là giữ nguyên định dạng như trình duyệt hiển thị.
Hướng dẫn liên quan
Lấy đúng pageurl ngay từ đầu — giải CAPTCHA với CaptchaAI.