如何用 10 行 Nodejs 代码开发一个 google 镜像站

发布于 1周前 作者 vueper 来自 nodejs/Nestjs

如何用 10 行 Nodejs 代码开发一个 google 镜像站

嘿嘿,其实是有点标题党了。。

Google 的首页的静态资源并没有使用 CDN,实现起来其实是比较简单的,如果有 CDN 的话还需要用正则替换静态链接。这里使用了 koa-proxy,虽然是下载之后再转发可能会带来一定的性能影响,不过可以使用 koa 的中间件对响应进行修改,如果用 koa-http-proxy 的话就没这么容易了。。


const Koa = require('koa')
const proxy = require('koa-proxy')
const mount = require('koa-mount')
const convert = require('koa-convert')
const app = new Koa();
const zlib = require('zlib')

app.use(convert(function * (next) { yield next if (this.path === ‘/’ || this.path === ‘/search’) { const data = yield zlib.gunzip.bind(zlib, this.body) const str = data.toString(‘utf-8’).replace(/<body([^>]*)>/, &lt;body$1&gt; &lt;div style="font-size: 14px; text-align: center; padding: 3px 10px;"&gt;Powered By &lt;a href="https://www.lets-ss.com"&gt;lets-ss.com&lt;/a&gt;&lt;/div&gt;) this.body = yield zlib.gzip.bind(zlib, str) } }))

app.use(convert(proxy({ host: ‘https://www.google.com.hk’, // 目标站 点 jar: true, // 转发 cookie followRedirect: false, // co-request 的参数,不跟随跳转 }))); app.listen(80);

测试可以使用 proxychains 让命令行走代理

proxychains node ./index.js

顺便分享一下我搭建的站点: https://g.lets-ss.com


17 回复

反代,不过你网站速度真慢


这样公开域名很容易被墙的

额,可能是有些广告或者统计链接还是走了 google 的域名

数了一下,不止 10 行,lol

其实 如果去掉修改网页内容的代码,加起来也只有 10 行多一点

是吗?谢谢关系,不过没关系,现在节点比较多,玩完了就撤。。

谢谢关心。。

说什么一共 10 行,你考虑过 Koa 的感受吗?

嘿嘿,其实是有点标题党哈,第一行就已经承认了,求各位大佬轻喷

如何一行代码都不写用 nginx 实现无痛人流

/t/341913

package.json 可以共享一下吗?

这是什么鬼

?? nodejs 程序不是需要 packages.json 然后安装依赖?不知道楼主 koa 是什么版本。

nodejs 会被你们这样搞臭的.别取这样的名字好么…

10 行还不简单 楼主快去几个换行

标题党。。

要在 Node.js 中用 10 行代码开发一个简单的 Google 镜像站,可以通过设置一个 HTTP 服务器,并将所有请求重定向到 Google 的主页。以下是一个基本的实现:

const http = require('http');
const url = require('url');

const googleUrl = 'https://www.google.com';

http.createServer((req, res) => {
  const parsedUrl = url.parse(req.url, true);
  const query = parsedUrl.query || '';
  let redirectUrl = googleUrl;

  // Append query parameters if any
  if (Object.keys(query).length > 0) {
    const queryString = new URLSearchParams(query).toString();
    redirectUrl += `?${queryString}`;
  }

  // Set redirect status code and headers
  res.writeHead(302, {
    Location: redirectUrl
  });

  // End response
  res.end();
}).listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

这段代码做了以下几件事:

  1. 引入 httpurl 模块。
  2. 创建一个 HTTP 服务器,监听端口 3000。
  3. 解析请求的 URL,检查是否有查询参数。
  4. 如果有查询参数,将其附加到 Google 的 URL。
  5. 设置重定向状态码为 302,并设置 Location 头为 Google 的 URL(可能包含查询参数)。
  6. 结束响应。

启动服务器后,访问 http://localhost:3000http://localhost:3000/?q=search+term 将会被重定向到 Google 的主页或相应的搜索结果页。

回到顶部