
Anh Tuan
Data Science Expert

FetchURL của Kimi Code CLI có thể truy xuất nội dung web, nhưng một quy trình vẫn cần từ chối lỗi 403, đầu ra trống, trang thách thức hoặc nội dung thiếu bằng chứng mong muốn trước khi gọi bước thành công.CLI Kimi Code có thể đọc tệp, chạy lệnh shell, truy xuất trang web và sử dụng công cụ MCP. Điều này khiến nó hữu ích cho các nhiệm vụ lập trình phụ thuộc vào nội dung web công khai hoặc được cấp quyền của người dùng. Trường hợp khó khăn không phải lúc nào cũng là lỗi mạng khó. Một yêu cầu có thể trả về lỗi chứa 403, nội dung trống gần như không có gì, hoặc trang thách thức trông giống như nội dung đối với một mô hình được kiểm tra lỏng lẻo.
Một quy trình đáng tin cậy nên phân loại kết quả này trước khi nó vào ngữ cảnh của mô hình. Khi lỗi là CAPTCHA được hỗ trợ trong môi trường được cấp quyền, CapSolver có thể nằm phía sau ranh giới MCP như một khả năng phục hồi được kiểm soát. Nó không nên trở thành cơ chế thử lại không giới hạn hoặc thay thế cho quyền truy cập.
Việc xử lý CAPTCHA trong Kimi Code CLI có nghĩa là phát hiện rằng việc truy xuất web không tạo ra bằng chứng mong muốn, định tuyến trang thách thức được cấp quyền và hỗ trợ đến công cụ được kiểm soát, sau đó xác minh lại trang. Nó không có nghĩa là xem mọi lỗi truy xuất là CAPTCHA hoặc để mô hình lặp lại các cuộc gọi công cụ cho đến khi có sự thay đổi.
Kho lưu trữ chính thức của Kimi Code https://github.com/MoonshotAI/kimi-code liệt kê khả năng truy xuất trang web, MCP, Skills và Plugins trong CLI. Tài liệu https://www.kimi.com/code/docs/en/kimi-code-cli/reference/tools.html định nghĩa FetchURL với đầu vào url và nội dung trang là đầu ra. HTML được chuyển đổi thành văn bản cơ sở, trong khi văn bản thuần và Markdown được truyền qua.
Hợp đồng này được thiết kế nhỏ gọn. Nó không hứa hẹn rằng văn bản trả về là tài liệu mong muốn, cũng không định nghĩa phản hồi có cấu trúc { status, text }. Nếu một bao bọc máy chủ hiển thị trạng thái HTTP hoặc lỗi truyền tải, chuẩn hóa chúng trong một bộ chuyển đổi. Sau đó xác minh cả bằng chứng truyền tải và ngữ nghĩa nội dung trước khi mô hình tiêu thụ kết quả.
| Ranh giới | Đầu vào | Đầu ra | Điều kiện dừng |
|---|---|---|---|
| Bộ chuyển đổi truy xuất | URL và bằng chứng mong muốn | Trạng thái chuẩn hóa, văn bản, lỗi | URL không hợp lệ, trạng thái HTTP cuối cùng, hoặc từ chối chính sách |
| Bộ xác minh kết quả | Kết quả truy xuất chuẩn hóa | accepted, recoverable, hoặc terminal |
Lỗi không được hỗ trợ hoặc mơ hồ |
| Phục hồi MCP | URL được cấp quyền, bằng chứng thách thức, số lần thử | Kết quả phục hồi có cấu trúc | Thiếu quyền, thách thức không được hỗ trợ, lỗi công cụ cuối cùng, hoặc thời gian hết hạn |
| Truy xuất xác minh | Cùng URL và quy tắc bằng chứng | Nội dung đã xác minh hoặc bằng chứng thất bại | Nội dung mong muốn vẫn vắng mặt sau một lần thử |
Sự phân tách này cung cấp cho mô hình một không gian quyết định hẹp. Nó chỉ có thể yêu cầu phục hồi sau khi bộ xác minh tạo ra trạng thái phục hồi; bộ điều khiển, không phải mô hình, thực thi ngân sách.
Sử dụng mẫu này chỉ cho các trang và môi trường kiểm thử bạn sở hữu hoặc được cấp quyền tự động hóa. Truy cập kỹ thuật không cấp quyền đọc dữ liệu riêng tư, bị hạn chế, nhạy cảm hoặc không được cấp quyền. Xem lại các điều khoản, chính sách áp dụng, quy tắc xử lý dữ liệu và giới hạn tần suất trước khi kích hoạt bất kỳ con đường phục hồi nào.
Bạn cần:
capsolver-core hiện tại.capsolver-core và capsolver-mcp từ hướng dẫn dịch vụ MCP CapSolver..kimi-code/mcp.json.Hướng dẫn cấu hình MCP chính thức của Kimi https://www.kimi.com/code/docs/en/kimi-code-cli/customization/mcp.html hỗ trợ các tệp mcp.json ở cấp độ người dùng và cấp độ dự án. Cấu hình dự án yêu cầu niềm tin, và các cuộc gọi công cụ MCP cá nhân có thể yêu cầu phê duyệt. Giữ ranh giới phê duyệt: tránh các quy tắc đại diện rộng, xem xét lệnh máy chủ và chỉ cho phép các công cụ mà quy trình cần.
Xác minh cô lập cho bài viết này sử dụng Kimi Code CLI 0.38.0, capsolver-core 0.1.0 và capsolver-mcp 0.1.0 trên Python 3.12. Vào ngày 26 tháng 8 năm 2026, cài đặt không giới hạn chọn MCP 2.1.1, trong khi gói MCP CapSolver hiện tại nhập mô đun MCP 1.x FastMCP. Gắn mcp<2 tạo ra MCP 1.29.1 và khôi phục lệnh được mô tả trong bộ thử nghiệm cô lập này.
Xem xét việc gắn này như một giải pháp tương thích tạm thời, không phải yêu cầu vĩnh viễn. Kiểm tra các gói chính thức hiện tại và xóa nó khi các giới hạn phụ thuộc của chúng hỗ trợ MCP 2.x.
CapSolver có thể được kết nối thông qua cấu hình MCP tiêu chuẩn của Kimi Code; đây là một kết nối MCP chung, không phải tuyên bố tích hợp gốc Kimi. Tạo môi trường cô lập và cài đặt các gói được mô tả:
python3.12 -m venv .venv-capsolver-mcp
.venv-capsolver-mcp/bin/python -m pip install \
"mcp<2" \
"capsolver-core @ git+https://github.com/capsolver/capsolver-core-python.git" \
"capsolver-mcp @ git+https://github.com/capsolver/capsolver-mcp.git"
.venv-capsolver-mcp/bin/capsolver-mcp --help
Thiết lập CAPSOLVER_API_KEY thông qua kho bí mật CI hoặc môi trường quy trình cục bộ. Sau đó sử dụng tệp .kimi-code/mcp.json của dự án như:
{
"mcpServers": {
"capsolver": {
"command": "/absolute/path/to/.venv-capsolver-mcp/bin/python",
"args": ["-m", "capsolver_mcp"],
"startupTimeoutMs": 10000,
"toolTimeoutMs": 30000,
"enabledTools": [
"detect_captchas",
"solve_captcha",
"solve_on_page",
"get_balance",
"get_supported_captchas"
]
}
}
}
Khởi động Kimi từ một quy trình mà kho bí mật đã cung cấp CAPSOLVER_API_KEY; quy trình con MCP kế thừa môi trường đó. Kimi cũng hỗ trợ đối tượng env cho máy chủ MCP, nhưng viết khóa thực tế vào tệp dự án có nguy cơ bị lộ trong kiểm soát nguồn. Sử dụng cấu hình thời gian chạy được bảo vệ nếu triển khai của bạn không thể kế thừa bí mật quy trình.
Kimi đặt tên các công cụ phát hiện với tên máy chủ, vì vậy mô hình nhìn thấy các tên như mcp__capsolver__detect_captchas. Thủ tục bắt tay cục bộ cho hướng dẫn này xác nhận việc phát hiện tất cả năm công cụ được mô tả. Nó cố ý dừng lại trước khi gọi một lần vì không có chứng chỉ thực tế hoặc bộ thử nghiệm trang thách thức được cấp quyền được cung cấp.
Trước khi quy trình bắt đầu, gọi get_supported_captchas hoặc áp dụng danh sách cho phép phiên bản trong bộ điều khiển của bạn. Đối với quy trình Agent này, giữ danh sách cho phép chỉ với reCAPTCHA v2, reCAPTCHA v3 và phiên bản Enterprise của nó, cũng như Cloudflare Turnstile. Nếu phát hiện tạo ra bất kỳ thứ gì khác, dừng lại để xem xét của con người.
Nhận mã thưởng CapSolver của bạn
Tăng ngân sách tự động hóa của bạn ngay lập tức!
Sử dụng mã thưởng CAP26 khi nạp tiền cho tài khoản CapSolver của bạn để nhận thêm 5% thưởng cho mỗi lần nạp — không giới hạn.
Nhận mã thưởng ngay bây giờ trong Bảng điều khiển CapSolver
Xác minh kết quả truy xuất trước khi nó đến bộ nhớ truy xuất, tóm tắt hoặc quyết định lập trình. Một bộ phân loại đáng tin cậy kiểm tra nhiều tín hiệu độc lập:
JavaScript sau đây là ví dụ cấp độ bộ chuyển đổi. Đối tượng { status, text } của nó là hợp đồng ứng dụng chuẩn hóa, không phải lược đồ thô của FetchURL:
const CHALLENGE_MARKERS = [
/verify you are human/i,
/captcha/i,
/cf-chl-/i,
/g-recaptcha/i,
/cf-turnstile/i,
];
export function classifyFetchResult(result, expectedTerms = []) {
const status = Number(result?.status ?? 0);
const text = String(result?.text ?? "").trim();
if (status === 403) {
return { kind: "recoverable", reason: "http_403", status };
}
if (status < 200 || status >= 400) {
return { kind: "terminal", reason: "unexpected_http_status", status };
}
if (text.length < 80) {
return { kind: "recoverable", reason: "empty_or_thin_content", status };
}
if (CHALLENGE_MARKERS.some((marker) => marker.test(text))) {
return { kind: "recoverable", reason: "challenge_page", status };
}
const missingTerms = expectedTerms.filter(
(term) => !text.toLowerCase().includes(term.toLowerCase()),
);
if (missingTerms.length > 0) {
return { kind: "recoverable", reason: "expected_content_missing", status, missingTerms };
}
return { kind: "accepted", reason: "expected_content_present", status };
}
Tinh chỉnh ngưỡng và dấu hiệu dựa trên bộ thử nghiệm sở hữu, không phải trang của bên thứ ba bất kỳ. Một lần khớp dấu hiệu là bằng chứng để kiểm tra, không phải quyền để tiếp tục. Ghi lại nguồn URL, lớp trạng thái, băm nội dung, quy tắc đã khớp và ID theo dấu, nhưng che giấu dữ liệu trang và thông tin xác thực khỏi nhật ký.
Đối với chẩn đoán rộng hơn, hướng dẫn lỗi CAPTCHA MCP của CapSolver giải thích cách tách lỗi truyền tải, phát hiện, giải quyết và chèn. Kimi nên nhận được phân loại có cấu trúc thay vì chỉ thị tự nhiên không giới hạn như "tiếp tục thử."
Bộ điều khiển có giới hạn nên chỉ có bốn kết quả cuối cùng: chấp nhận, phục hồi và xác minh, dừng lại hoặc yêu cầu con người. Nó không bao giờ suy ra thành công chỉ vì cuộc gọi MCP trả về mà không ném lỗi.
export async function runBoundedRecovery({
fetchPage,
recoverThroughMcp,
url,
expectedTerms,
authorized,
maxRecoveryAttempts = 1,
}) {
const evidence = [];
let recoveryAttempts = 0;
const first = await fetchPage(url);
const firstCheck = classifyFetchResult(first, expectedTerms);
evidence.push({ stage: "initial_fetch", check: firstCheck });
if (firstCheck.kind === "accepted") {
return { state: "accepted", recoveryAttempts, evidence };
}
if (firstCheck.kind === "terminal") {
return { state: "stopped", stopReason: firstCheck.reason, recoveryAttempts, evidence };
}
if (!authorized) {
return { state: "human_required", stopReason: "authorization_required", recoveryAttempts, evidence };
}
if (maxRecoveryAttempts < 1) {
return { state: "stopped", stopReason: "recovery_budget_exhausted", recoveryAttempts, evidence };
}
recoveryAttempts += 1;
const recovery = await recoverThroughMcp({
url,
reason: firstCheck.reason,
attempt: recoveryAttempts,
});
evidence.push({ stage: "mcp_recovery", result: recovery });
if (recovery?.status !== "recovered") {
return {
state: recovery?.retryable ? "human_required" : "stopped",
stopReason: recovery?.errorCode ?? "recovery_failed",
recoveryAttempts,
evidence,
};
}
const second = await fetchPage(url);
const secondCheck = classifyFetchResult(second, expectedTerms);
evidence.push({ stage: "verification_fetch", check: secondCheck });
if (secondCheck.kind === "accepted") {
return { state: "recovered_and_verified", recoveryAttempts, evidence };
}
return {
state: "human_required",
stopReason: "verification_failed_after_recovery",
recoveryAttempts,
evidence,
};
}
Bộ chuyển đổi recoverThroughMcp là nơi lớp điều phối được phê duyệt gọi công cụ CapSolver được mô tả. Đầu vào của nó nên bao gồm URL được cấp quyền, bằng chứng thách thức đã phát hiện và số lần thử. Đầu ra của nó nên chuẩn hóa thành công, mã lỗi được che giấu và khả năng thử lại. Giữ các đầu vào tác vụ cụ thể của dịch vụ bên trong bộ chuyển đổi này và xác minh chúng dựa trên tài liệu chính thức hiện tại thay vì yêu cầu mô hình tạo các trường.
Lần truy xuất thứ hai của bộ điều khiển là bắt buộc. Xác minh nó với cùng các thuật ngữ và quy tắc nội dung như yêu cầu đầu tiên. Một mã thông báo hoặc kết quả công cụ là kết quả trung gian; nội dung trang là bằng chứng chấp nhận.
Dừng mà không gọi công cụ khi thiếu quyền, URL vượt quá tập hợp nguồn được phê duyệt hoặc bộ xác minh trả về lỗi truyền tải cuối cùng. Dừng sau cuộc gọi công cụ khi thách thức không được hỗ trợ, dịch vụ báo lỗi không thể thử lại, ngân sách thời gian hết hạn hoặc kiểm tra số dư thất bại. Yêu cầu con người sau lần thử phục hồi duy nhất nếu lần truy xuất xác minh vẫn mỏng, bị thách thức hoặc thiếu nội dung mong muốn.
Những quy tắc này cũng ngăn ngừa ô nhiễm ngữ cảnh. Chỉ nội dung trang được chấp nhận mới nên vào lịch sử nhiệm vụ Kimi hoặc kho lưu trữ truy xuất sau. Giữ các nội dung thất bại trong một hồ sơ bằng chứng bị cách ly với thời gian lưu trữ ngắn và che giấu.
Quan sát nên giải thích tại sao một bước thay đổi trạng thái mà không tiết lộ bí mật hoặc nội dung trang đầy đủ. Phát hành một sự kiện có cấu trúc cho mỗi chuyển tiếp:
{
"traceId": "retrieval-7f2c",
"stage": "verification_fetch",
"origin": "authorized.example",
"classification": "expected_content_missing",
"recoveryAttempts": 1,
"finalState": "human_required"
}
Các trường hữu ích bao gồm lớp trạng thái đã chuẩn hóa, quy tắc xác minh, độ dài nội dung, băm nội dung đã che đi, tên công cụ MCP, thời gian đã trôi qua, số lần thử, và trạng thái cuối cùng. Không ghi lại khóa API, token thách thức đầy đủ, dữ liệu trang nhạy cảm, hoặc cấu hình MCP mang theo bí mật.
Thiết lập cảnh báo về tỷ lệ yêu cầu con người, tỷ lệ thất bại xác minh, và thời out công cụ. Tỷ lệ 403 tăng có thể cho thấy chính sách truy cập thay đổi, bộ thích nghi lấy dữ liệu bị hỏng, hoặc thách thức; điều này không đủ bằng chứng để xác định nguyên nhân. Đối với bối cảnh quy trình chung, xem MCP là gì trong hệ thống AI.
Sử dụng thiết kế này cho tự động hóa công khai, sở hữu hoặc được ủy quyền rõ ràng. Tuân thủ các điều khoản, kiểm soát truy cập, chỉ thị robots, giới hạn tốc độ, giảm thiểu dữ liệu, và yêu cầu lưu trữ. Không sử dụng công cụ CAPTCHA để truy cập nội dung riêng tư hoặc bị hạn chế hoặc tiếp tục sau khi trang đã rõ ràng rút lại quyền truy cập.
Giữ danh sách cho phép mục tiêu, người quản lý cho mỗi bản ghi ủy quyền, ngày hết hạn, và công tắc dừng. Áp dụng tốc độ yêu cầu thấp và lưu trữ nội dung công khai đã chấp nhận khi được phép. Yêu cầu phê duyệt mới khi quy trình thay đổi nguồn, mục đích, danh mục dữ liệu hoặc tần suất thực thi.
Lớp MCP nên sử dụng tập công cụ tối thiểu và phê duyệt ít quyền nhất. Hướng dẫn CapSolver cho các đại diện AI (https://docs.capsolver.com/en/guide/ai/capsolver-for-ai-agents/) mô tả quy trình Agent được hỗ trợ; người điều khiển vẫn chịu trách nhiệm về quyền, giới hạn thử, xác minh đầu ra và dừng.
Việc xử lý CAPTCHA bằng CLI Kimi Code đáng tin cậy bắt đầu bằng cách từ chối thành công giả. Chuẩn hóa bằng chứng FetchURL, kiểm tra nội dung mong đợi, ủy quyền mục tiêu, cho phép một lần phục hồi được hỗ trợ, sau đó truy xuất và xác minh lại. Bất kỳ thứ gì mơ hồ hoặc vẫn bị thách thức nên dừng lại để xem xét của con người.
Biên giới MCP chung giữ cho quy trình web của Kimi tách biệt khỏi chi tiết dịch vụ, trong khi máy trạng thái kiểm soát các lần thử lại và ghi lại bằng chứng. Nếu quy trình Agent được ủy quyền của bạn cần lớp phục hồi CAPTCHA được tài liệu hóa, hãy đánh giá CapSolver với một bộ thử nghiệm sở hữu trước khi kích hoạt nó trong sản xuất.
Câu hỏi: Kimi Code CLI có tích hợp CapSolver bản địa không?
Không. Hướng dẫn này sử dụng cấu hình MCP chung được tài liệu hóa của Kimi Code để kết nối máy chủ MCP CapSolver; nó không tuyên bố tích hợp bản địa hoặc liên minh chính thức.
Câu hỏi: FetchURL có trả về đối tượng trạng thái HTTP và nội dung không?
Không theo hợp đồng công cụ được tài liệu hóa. FetchURL nhận một URL và trả về nội dung trang; một bộ thích nghi chủ phải chuẩn hóa các lỗi giao thức có sẵn hoặc thông tin trạng thái trước khi áp dụng bộ phân loại ví dụ.
Câu hỏi: Mỗi lần FetchURL 403 của Kimi Code có kích hoạt phục hồi CAPTCHA không?
Không. Một mã 403 có thể có nhiều nguyên nhân, bao gồm thất bại chính sách hoặc ủy quyền. Phân loại phản hồi, xác minh quyền, phát hiện thách thức được hỗ trợ và dừng lại khi nguyên nhân mơ hồ.
Câu hỏi: Loại thách thức nào nên nằm trong quy trình Agent này?
Giữ danh sách cho phép chỉ bao gồm khả năng reCAPTCHA v2, reCAPTCHA v3 bao gồm Enterprise, và Cloudflare Turnstile được tài liệu hóa. Xác minh hỗ trợ thời gian chạy và dừng lại với bất kỳ loại nào không nhận biết được.
Câu hỏi: Một đại diện nên thực hiện bao nhiêu lần thử phục hồi CAPTCHA?
Mẫu này cho phép một lần phục hồi theo sau là một lần truy xuất xác minh. Nếu xác minh thất bại, quy trình dừng lại và yêu cầu xem xét của con người thay vì gọi lại công cụ.
Câu hỏi: Mô hình có thể quyết định rằng phục hồi thành công từ phản hồi MCP riêng không?
Không. Xem phản hồi MCP là kết quả trung gian; lặp lại truy xuất được ủy quyền và xác minh bằng chứng trang mong đợi trước khi chấp nhận nội dung.
Học cách giải reCAPTCHA trên các tác nhân LangGraph với công cụ CapSolver, định tuyến ToolNode, tham số an toàn, thử lại và thiết kế quy trình có thể tiếp tục.

Học cách giải quyết Cloudflare Turnstile trong các agent AutoGen với CapSolver, đăng ký công cụ có kiểu, xử lý token, lặp lại và thiết kế quy trình bảo mật.
