如何用 10 行 Nodejs 代码开发一个 google 镜像站
如何用 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([^>]*)>/, <body$1> <div style="font-size: 14px; text-align: center; padding: 3px 10px;">Powered By <a href="https://www.lets-ss.com">lets-ss.com</a></div>
)
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
反代,不过你网站速度真慢
这样公开域名很容易被墙的
额,可能是有些广告或者统计链接还是走了 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');
});
这段代码做了以下几件事:
- 引入
http
和url
模块。 - 创建一个 HTTP 服务器,监听端口 3000。
- 解析请求的 URL,检查是否有查询参数。
- 如果有查询参数,将其附加到 Google 的 URL。
- 设置重定向状态码为 302,并设置
Location
头为 Google 的 URL(可能包含查询参数)。 - 结束响应。
启动服务器后,访问 http://localhost:3000
或 http://localhost:3000/?q=search+term
将会被重定向到 Google 的主页或相应的搜索结果页。