Skip to content

ascii2d 403 解决方案

神代綺凛 edited this page Dec 1, 2024 · 2 revisions

TL;DR

通过 Cloudflare Worker 反代可解决问题,之后将 Worker 域名填写到配置项 ascii2dHost 即可

const ASCII2D_HOST = 'ascii2d.net';

/**
 * @param {Request} request
 */
async function handleRequest(request) {
  const url = new URL(request.url);
  const origHost = url.host;
  url.host = ASCII2D_HOST;

  const response = await fetch(url, getRequestInit(request));

  if ([301, 302, 303, 307, 308].includes(response.status)) {
    return getRedirectResponse(origHost, response);
  }

  return response;
}

/**
 * @param {Request} request
 * @returns {RequestInit}
 */
function getRequestInit({ headers, method, body }) {
  return {
    headers: new Headers([...headers].filter(([name]) => !name.startsWith('cf-'))),
    method,
    body,
    redirect: 'manual',
  };
}

/**
 * @param {string} host
 * @param {Response} response
 * @returns {Response}
 */
function getRedirectResponse(host, { headers, body, status, statusText }) {
  const newLocation = new URL(headers.get('location'));
  newLocation.host = host;
  return new Response(body, {
    status,
    statusText,
    headers: {
      ...Object.fromEntries(headers),
      location: newLocation.href,
    },
  });
}

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

1. 准备 Cloudflare 帐号一个

没有的请自行注册,使用免费计划,不需要付费/绑卡等

2. 创建 Worker 并部署反代代码

首次进入 Worker 可能会要进行一系列初始设置操作,例如 Worker 子域取名等,自行完成即可

  1. 点创建 image
  2. 继续点创建 image
  3. 取个名,默认名称也没关系,点部署 image
  4. 点编辑代码 image
  5. 上方给出的代码复制粘贴覆盖左侧编辑区原先所有代码,点部署,等待部署完成后点一下刷新,如果能成功加载出 ascii2d 主页,那么部署成功(可能需要等一段时间,新域名的 SSL 证书签发需要一定时间) image
  6. 将该 Worker 的域名形如 xxx.yyy.workers.dev 填到机器人配置项 ascii2dHost,重载机器人配置,大功告成