认识
内容:网页代理,PHP 实现,通过 cURL 实现。由于效率一般,我决定用 zephir 重写;
Project: https://github.com/Abban/glype
组成
1)Client 将请求的 URL,编码或者加密(无法轻易还原)之后,发送到 Proxy;
2)Proxy 先解码 URL,然后使用 cURL 函数库,请求 Target;
3)Target 响应以后,开始解析页面,解析目的是替换页面中的资源链接(替换资源属性,如 img/src、a/href 等);
4)解析完成后返回页面给 Client,之后 Client Browser 就开始解析页面;
5)如果页面中存在资源链接,重复执行上述过程;
构建
原有的项目已经是 5 年前了(03/15/2017)。我们重写了原有的项目,基于面向对象,同时加入了 html、css 新属性的支持。
共有两个版本:
PHP:http://git.oschina.net/demoii/glype
zephir:http://git.oschina.net/demoii/glype-zephir%EF%BC%88%E5%8E%9F%E9%A1%B9%E7%9B%AE%E7%9A%84%E9%87%8D%E5%86%99%E8%BF%98%E6%B2%A1%E6%9C%89%E5%AE%8C%E6%88%90%EF%BC%89
glype-zephir 是 glype 的 zephir 版本,由于性能原因而基于 glype 重新开发的项目。
项目的演示地址:http://andev.d3rm.org/browse.php?u=cUbOykRDC4P8SdBDcELVS4R9SkDgy4xOSnIzS4RDXoLbC6W8&b=5
Homepage: http://andev.d3rm.org
php 版本的 glype 吞吐量测试地址文件
# 的测试地址为 Andoid 开发者的官网地址。
# 首页、AndroidStudio、Develop、Simple、字体文件
http://andev.d3rm.org/browse.php?u=cUbOykRDC4P8SdBDcELVS4R9SkDgy4xOSnIzS4RDXoLbC6W8&b=5
http://andev.d3rm.org/browse.php?u=cUbOykRDC4P8SdBDcELVS4R9SkDgy4xOSnIUCYPgHlGOHlLgT12ZHYRASu%3D%3D&b=5
http://andev.d3rm.org/browse.php?u=cUbOykRDC4P8SdBDcELVS4R9SkDgy4xOSnIUCYPgHlGOT4PVCYP9T15ZHYRASu%3D%3D&b=5
http://andev.d3rm.org/browse.php?u=cUbOykRDC4P8SdBDcELVS4R9SkDgy4xOSnIgT1TDS6IfykDZT6Pry4VaSlf%3D&b=5
http://andev.d3rm.org/browse.php?u=cUbOykRDC4P8SdBDcELVS4R9SkDgy4xOSnIUilWfS6PUykDZT6Pry4VaSlf%3D&b=5
http://andev.d3rm.org/browse.php?u=vEGOT4IZCY5ZTdxai1Rzi9LtSkaOc9I9Sk7OC6GOCtNWyW7rlgzgSjzDSUxnx1zpT1VjTpVPPPTale7VveRlCWR7KkCzc4L3H6WlnjcZCkI4Ttq%3D&b=5
对 PHP 版本的 Glype 进行测试。
本次测试的地址:http://andev.d3rm.org%E3%80%82
测试的项目为:《Gype-PHP》
服务器环境:系统 Linux;Nginx;PHP7;
吞吐量测试
测试工具:http_load
测试文件内容,点击查看。
测试命令:
改进
不完全是面向对象,这些是重写中比较尴尬的一部分。
即使是敏感字的 base64 编码以后,也过不了 GFW,但是这个问题通常很好解决。可以使用 Base64 变体,就是修改编码字符顺序,参考 Base64 实现,也可以更换加密算法;