You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
摘要
提供了一个使用油猴脚本绕过 Claude 支付限制以获取免费订阅(max20)的教程。
原帖内容
又是别人玩烂了才发出来,没人发吗,小号试用记得隔离,使用以下油猴脚本 打开 claude 网页版,支付资料选德国,支付方式选 sepa ,使用 http://randomiban.com/ 随机生成德国卡号填入直接支付就行了,max20 到手 // ==UserScript== // @ name TestExample Cassia Response Mock // @ namespace local.testexample.checkout // @ version 1.1.0 // @ description 将 checkout_capabilities 响应改写为 cassia // @ match :// claude.ai/ // @ match :// .claude.ai/* // @ run-at document-start // @ grant none // @ sandbox raw // ==/UserScript== (function () { "use strict"; const TARGET_HOST = " claude.ai "; const TARGET_PATH = /^/api/organizations/[^/]+/subscription/checkout_capabilities/?$/; const MOCK_DATA = { checkout_flow: "cassia" }; const MOCK_BODY = JSON.stringify(MOCK_DATA); const MOCK_LENGTH = new TextEncoder().encode(MOCK_BODY).byteLength; function getTargetUrl(input, method = "GET") { try { let rawUrl; if (typeof input === "string" || input instanceof URL) { rawUrl = String(input); } else if (input && typeof input.url === "string") { rawUrl = input.url; } else { return null; } const url = new URL(rawUrl, location.href); if (String(method).toUpperCase() !== "GET") { return null; } // 允许主域名以及其子域名 const hostMatched = url.hostname === TARGET_HOST || url.hostname.endsWith("." + TARGET_HOST); if (!hostMatched) { return null; } if (!TARGET_PATH.test(url.pathname)) { return null; } return url; } catch (error) { console.error("[Cassia Mock] URL 解析失败:", error); return null; } } function createMockResponse(originalResponse) { const headers = new Headers(originalResponse.headers); headers.delete("content-length"); headers.delete("content-encoding"); headers.delete("etag"); headers.delete("content-md5"); headers.set( "content-type", "application/json; charset=utf-8" ); headers.set("content-length", String(MOCK_LENGTH)); headers.set("cache-control", "no-store"); const response = new Response(MOCK_BODY, { status: 200, statusText: "OK", headers }); // 尽量保留原始响应信息 try { Object.defineProperties(response, { url: { value: originalResponse.url, configurable: true }, redirected: { value: originalResponse.redirected, configurable: true }, type: { value: originalResponse.type, configurable: true } }); } catch () { // 不影响主体改写 } return response; } /* 拦截 Fetch / const nativeFetch = window.fetch; window.fetch = async function (input, init) { const method = init?.method || (input instanceof Request ? input.method : "GET"); const targetUrl = getTargetUrl(input, method); const originalResponse = await nativeFetch.apply(this, arguments); if (!targetUrl) { return originalResponse; } console.warn( "[Cassia Mock] Fetch 响应已改写:", targetUrl.href, MOCK_DATA ); return createMockResponse(originalResponse); }; / 拦截 XMLHttpRequest */ const XhrPrototype = XMLHttpRequest.prototype; const xhrInfo = new WeakMap(); const loggedXhrs = new WeakSet(); const nativeOpen = XhrPrototype.open; const nativeSend = XhrPrototype.send; const nativeGetResponseHeader = XhrPrototype.getResponseHeader; const nativeGetAllResponseHeaders = XhrPrototype.getAllResponseHeaders; XhrPrototype.open = function (method, url) { let absoluteUrl; try { absoluteUrl = new URL( String(url), location.href ).href; } catch () { absoluteUrl = String(url); } xhrInfo.set(this, { method: String(method || "GET").toUpperCase(), url: absoluteUrl }); return nativeOpen.apply(this, arguments); }; function getMatchedXhr(xhr) { const info = xhrInfo.get(xhr); if ( !info || xhr.readyState !== XMLHttpRequest.DONE ) { return null; } return getTargetUrl(info.url, info.method); } function replaceXhrGetter(propertyName, replacement) { const descriptor = Object.getOwnPropertyDescriptor( XhrPrototype, propertyName ); if ( !descriptor || typeof descriptor.get !== "function" || descriptor.configurable === false ) { console.warn(
[Cassia Mock] 无法接管 XHR.${propertyName}); return; } const nativeGetter = descriptor.get; Object.defineProperty(XhrPrototype, propertyName, { ...descriptor, get: function () { if (!getMatchedXhr(this)) { return nativeGetter.call(this); } return replacement.call(this, nativeGetter); } }); } replaceXhrGe...评论 (10)
sickoo: 建议匿名环境使用,不然连坐影响
ykl150141: 我不敢试我电脑目前这个还在正常充钱运行他不封我就好了:脚本篡改 Claude 网页的结账能力响应,以尝试绕过官方付款流程它只在浏览器本地把 checkout_capabilities 的响应改成 {"checkout_flow":"cassia"}
Taxpayer: 在哪里选支付方式?
Y25tIGxpdmlk: @ Taxpayer #3 切换几次国家它就会出来。
Taxpayer: @ Y25tIGxpdmlk 成功了,多谢兄弟
malagebidi: 为了保持这里的良好氛围,V2EX 有自己的明确规则: ... • 这里绝对不会有任何教人如何钻空子的讨论 ...
ykl150141: @ malagebidi 好的点赞 100 就下架
drainlin: 亲测成功了
Lach: @ ykl150141 只看到 DE VAT 啊,没看到 SEPA
ykl150141: @ drainlin 存活多久凉凉了发一下声明
由社区爬虫自动生成于 2026-07-26T08:27:39.322Z
All reactions