CF版本的始皇佬的claude镜像未完待续

是这样子的,今天看到一个佬分享了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);
  },
};

6 个赞

帮顶

2 个赞

快问快答软件分享

9 个赞

帮顶