是这样子的,今天看到一个佬分享了php的源代码,为此,我想通过基于之前oaifree的方式,来实现,cf的直接登录,故而写了一版代码,这版代码是直接利用,网页,然后自动获取kv里面的session_key来读取的,但是,有点问题,cf无法自动化去模拟浏览器,因此,我现在打算使用始皇的接口来获取,但是我不太会用这个,代码完整版放下面,希望,有佬能发力,进而完善即可。
// Cloudflare Worker 脚本 - 自动登录 Claude
async function getValidUsername(env) {
return await env.CLAUDE_SETTINGS.get("VALID_USERNAME");
}
async function getSessionKey(env) {
return await env.CLAUDE_SETTINGS.get("SESSION_KEY");
}
async function autoLogin(sessionKey) {
// 第一步:获取登录页面
const loginResponse = await fetch('https://claude.asia/login');
const loginHtml = await loginResponse.text();
// 从登录页面提取必要的参数(如果需要的话)
// 这里需要根据实际情况进行调整
// const csrfToken = loginHtml.match(/name="csrf-token" content="(.+?)"/)[1];
// 第二步:提交 sessionKey
const submitResponse = await fetch('https://claude.asia/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
// 'X-CSRF-Token': csrfToken,
},
body: JSON.stringify({ session_key: sessionKey }),
});
// 检查响应,如果成功,返回最终的聊天页面 URL
if (submitResponse.ok) {
return submitResponse.url;
} else {
throw new Error('自动登录失败');
}
}
async function handleRequest(request, env) {
const url = new URL(request.url);
if (request.method === 'POST') {
const formData = await request.formData();
const username = formData.get('username');
const validUsername = await getValidUsername(env);
if (username === validUsername) {
const sessionKey = await getSessionKey(env);
try {
const chatUrl = await autoLogin(sessionKey);
return Response.redirect(chatUrl, 302);
} catch (error) {
return new Response('自动登录失败,请稍后再试', { status: 500 });
}
} else {
return new Response('用户名无效', { status: 403 });
}
}
// 显示登录表单
const html = `
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Claude 自动登录</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
}
.login-form {
background-color: white;
padding: 2rem;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
h1 {
text-align: center;
color: #333;
}
input, button {
display: block;
width: 100%;
padding: 0.5rem;
margin-bottom: 1rem;
border: 1px solid #ddd;
border-radius: 4px;
}
button {
background-color: #4CAF50;
color: white;
border: none;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="login-form">
<h1>Claude 自动登录</h1>
<form method="POST">
<input type="text" name="username" placeholder="请输入用户名" required>
<button type="submit">登录</button>
</form>
</div>
</body>
</html>
`;
return new Response(html, {
headers: { 'Content-Type': 'text/html' },
});
}
export default {
async fetch(request, env, ctx) {
return handleRequest(request, env);
},
};