Skip to content

本地服务器相关

dsy4567 edited this page Aug 26, 2023 · 9 revisions

功能

本地服务器充当 4399 游戏资源服务器的反向代理,并提供一些有用的接口。

从外部访问

出于安全考虑,以及防止其他设备滥用服务,本地服务器仅绑定 127.0.0.1 这个 IP,这意味着该服务无法直接从公网/内网其他设备访问。如果需要从其他设备访问该服务,可以利用运行在同一机器上的 Nginx 等工具进行端口转发(拥有配置适当的端口转发功能的远程开发环境(如 GitHub Codespacescode-server)用户无须考虑此问题)。

CORS 策略

本地服务器不会为大多数请求设置 access-control-allow-origin,此时浏览器可能会阻止发往本地服务器的跨域请求。

接口参考

如果用户使用本地 VSCode,且未更改设置,则以下接口一般均位于 http://127.0.0.1:44399 上。

Warning: 请不要尝试猜测接口的 hostnameport,因为用户既可能修改设置,又可能在 GitHub Codespaces 或其他奇怪的环境上使用 4399 on VSCode。

请求路径区分大小写。


/

重定向到 H5 小游戏入口页或 <Flash 游戏的 .swf 文件所在路径>/_4ov-flash-player.htm

版本要求

v0.3.0 及更高版本

示例

--- 请求 ---
method: GET
path: /

--- 响应 ---
code: 302
headers:
  Location: /4399swf/upload_swf/ftp39/cwb/20220706/01a/index.html
body: <空>


/_4ov/webGame

重定向到最近玩的 H5 页游。

版本要求

v0.3.0 及更高版本

示例

--- 请求 ---
method: GET
path: /_4ov/webGame

--- 响应 ---
code: 302
headers:
  Location: https://client-zmxyol.3304399.net/client/?account=username123&gameId=100060323&nick=blue&20sky&userId=1145141919&userName=blue&20sky&time=1690000000&sign=0123456789abcdef0123456789abcdef&pc=0&device=undefined&addiction=0
body: <空>


/_4ov/flash

重定向到最近玩的 Flash 游戏的 .swf 文件。

版本要求

v0.3.0 及更高版本

示例

--- 请求 ---
method: GET
path: /_4ov/flash

--- 响应 ---
code: 302
headers:
  Location: /4399swf/upload_swf/ftp41/liuxinyu/20221201/14.swf
body: <空>


/_4ov/proxy/<完整 URL>

代理。发出请求时会强制使用 HTTPS。

默认情况下,通过代理发往 4399.com 域的请求不会带上 cookie,即使已指定 cookie 请求头。

代理支持所有请求方法(GET、POST 等)。

如果用户禁用了代理,发往此处的请求会被重定向到被代理的 URL。

默认情况下,您发往非本地服务器的请求会经过 4399 on VSCode 的 ServiceWorker,而后经过代理。满足部分条件的请求会绕过 ServiceWorker。

版本要求

v0.3.0 及更高版本

示例

--- 请求 ---
method: GET
path: /_4ov/proxy/https://www.4399.com/

--- 响应 ---
code: <原样提供>
headers: <原样提供>
body:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<title>小游戏,4399小游戏,小游戏大全,双人小游戏大全 - www.4399.com</title>
...


/_4ov/openUrl/<完整 URL>

打开链接。如果要打开的链接是某个 4399 游戏,则直接启动游戏。

请求该接口后立即返回 200 状态码。

默认情况下,该操作需要征得用户同意。

该功能默认开启,但可以被用户禁用。

在 HTML 代码片段中,您可以直接调用已经重写的 open() 函数。

版本要求

v0.3.0 及更高版本

示例

--- 请求 ---
method: GET
path: /_4ov/openUrl/https://www.4399.com/

--- 响应 ---
code: 200
headers: <默认响应头>
body: <空>


/_4ov/confirm?reason=<reason>

询问用户是否允许执行某些操作,用户禁用设置项或点击允许 4399-on-vscode.confirm 则返回 200 状态码,用户关闭通知或点击拒绝则返回 403 状态码,缺少 URL 参数 reason 则返回 400 状态码。

请不要使用此接口要求用户决定是否执行敏感或高危操作。

版本要求

v0.3.4 及更高版本

示例

--- 请求 ---
method: GET
path: /_4ov/confirm?reason=某个游戏想要播放激励广告

--- 响应 1 (用户已允许) ---
code: 200
headers: <默认响应头>
body: <空>

--- 响应 2 (用户已拒绝) ---
code: 403
headers: <默认响应头>
body: <空>


/_4ov/stop/<secret>

停止本地服务器,<secret> 为 4399 on VSCode 启动时生成的随机数,可在控制台日志中找到。

无论成功与否,均返回 200 状态码。

版本要求

v0.3.0 及更高版本

示例

--- 请求 ---
method: GET
path: /_4ov/stop/0.1145141919810114

--- 响应 ---
code: 200
headers: <默认响应头>
body: <空>


/sw-4ov.js

返回 ServiceWorker 代码。

版本要求

v0.3.0 及更高版本

示例

--- 请求 ---
method: GET
path: /_4ov/stop/0.1145141919810114

--- 响应 ---
code: 200
headers: <默认响应头>
body:

/** Copyright (c) 2022-2023 dsy4567. See License in the project root for license information. */

const whiteList = [
    "cdnjs.cloudflare.com",
    "jsdelivr.net",
    "onmicrosoft.cn",
    "ruffle",
    "unpkg.com",
];
self.addEventListener("activate", ev => {
    ev.waitUntil(clients.claim());
});
self.addEventListener("install", ev => {
    self.skipWaiting();
});
...


/<任意路径>/_4ov-flash-player.htm

返回 Flash 播放器页面

版本要求

v0.3.0 及更高版本

示例

--- 请求 ---
method: GET
path: /4399swf/upload_swf/ftp41/liuxinyu/20221201/_4ov-flash-player.html

--- 响应 ---
code: 200
headers: <默认响应头>
body:

<!DOCTYPE html>
<html style="height: 100%;margin: 0;padding: 0;">
    <head>
        <meta charset="UTF-8" />
        <meta
            name="viewport"
            content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"
        />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>flash 播放器(Ruffle 引擎)</title>
        <style>
            ::-webkit-scrollbar {
                display: none !important;
            }

            html, body {
                overflow: hidden;
                margin: 0;
                padding: 0;
            }
        </style>
...


其他任意路径

向 4399 的游戏资源服务器请求资源(仅 GET 方法)

版本要求

全部版本

示例

--- 请求 ---
method: GET
path: /4399swf/upload_swf/ftp38/cwb/20220425/02/index.html

--- 响应 ---
code: <原样提供>
headers: <原样提供>
body:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no, minimal-ui"
  />
  <meta http-equiv="Pragma" content="no-cache" />
  <meta http-equiv="Cache-Control" content="no-cache" />
  <meta http-equiv="Expires" content="0" />
  <meta http-equiv="Access-Control-Allow-Origin" content="*" />
  <meta http-equiv="x-rim-auto-match" content="none" />
  <meta name="mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="format-detection" content="telephone=no" />
  <meta content="false" id="twcClient" name="twcClient" />
  <meta name="full-screen" content="true" />
  <meta name="screen-orientation" content="true" />
  <meta name="x5-fullscreen" content="true" />
  <meta name="360-fullscreen" content="true" />
  <meta name="renderer" content="webkit" />
  <title>4399游戏</title>
</head>

<body>
  <div id="app"></div>
  <script type="text/javascript" src="https://cdn.h5wan.4399sj.com/h5mini-2.0/dist/static/js/index.js"></script>
</body>

</html>