# webhook **Repository Path**: bgcls/webhook ## Basic Information - **Project Name**: webhook - **Description**: WEB HOOK网页利器,仅供学习使用,请勿用于商业用途. 如果某网页广告多,可以使用这个东西,通过修改本地hosts把域名转到自己服务器上,服务器那边进行绑定,然后手动编写插件,利用本框架,可以让你不用为难! - **Primary Language**: PHP - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-04-16 - **Last Updated**: 2023-11-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Hook网页数据插件 --- ## 前言 > WEB HOOK网页利器,仅供学习使用,请勿用于商业用途. 如果某网页广告多,可以使用这个东西,通过修改本地hosts把域名转到自己服务器上,服务器那边进行绑定,然后手动编写插件,利用本框架,可以让你不用为难! 须知: 主要自己修改hosts文件,把域名指向自己的服务器,服务器需要添加相应域名站点.//如果服务器是本机,则调用full_reforward,curl_post_real时填入真实服务器的IP地址. 除了可以修改hosts文件以外,还可以添加user_domain请求头来指定服务器上所hook的域名 手机上推荐使用Vitrual Hosts软件(免Root设置Hosts) chrome浏览器可以使用ModHeader插件添加header头部,用自己服务器正常的访问ip来带user_domain伪装Host。(这样就可以不用修改自己电脑上的host文件啦) 某些特定的http头需要nginx 或 apache 开启非标准头接收才能使用。 --- ## 搭建 1.下载源码,绑定需要HOOK的域名到当前这个项目的站点.(服务器上面请选择php7以上) 2.添加伪静态规则, nginx的规则 rewrite ^(.*)$ /index.php; #允许非标准的http头 underscores_in_headers on; apache的规则 Options +FollowSymlinks -Multiviews RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] #解除屏蔽authorization字段 RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] #解除屏蔽Content-Type字段 RewriteRule .* - [E=HTTP_CONTENT_TYPE:%{HTTP:Content-Type},L] 3.如果是别人的域名,需要修改本地的hosts文件,指向域名到服务器. 4.访问http://任意指向本站的域名/core/show 看是否搭建服务是否成功. 5.根据规则,编写PHP插件.(插件命名规则:域名.php,放置在plugin文件夹里面) 6.测试脚本 7.完成 > 插件可以仿照plusgin/demo.php制作.注意,需要继承\Applications类。(注意每个插件的namespace不一样,class名可以一样) > 可以在data/插件名目录/app.ini设置配置文件。使用$this->config[]读取。 > 如果目标服务器是https协议,那么自己的这个服务器也必须是支持https写的才行。(随便放个证书就行,证书错误可以不用管。) --- ## 公共函数原型列表: | 函数 | 说明 | | ---- | ---- | |function full_reforward($ip="");|把当前服务器接收到的所有参数提交到原服务器| |function curl_post($domain,$port = 80,$url ,$type, $data = array(),$header = array());|curl函数【无指定ip版】| |function curl_post_real($ip,$domain,$port = 80,$url ,$type, $data = array(),$header = array());|curl函数【允许指定IP版】| |function curl_get_simple($url);|curl函数【简单的get方法】| |function get_all_headers();|获取当前服务器收到的所有请求头| | ## 制作插件(重点) 插件属性 |方法名|说明| | ---- | ---- | |set_ip(str)|设置原始服务器ip| |set_host(str)|设置转发的域名| |set_port(int)|设置目标服务器的端口| |set_url(str)|设置转发的url| |set_method(str)|设置请求类型(GET,POST)等| |set_protocol(str)|设置协议类型,比如http,https| |set_debug(bool)|设置插件是否为调试模式| | 调用原型 | 调用说明 | 调用例子| | ---- | ---- | ---- | |$this->route([匹配url],[当前类下的函数名]);|HOOK 某个URL|$this->route("/login","login");| |$this->routeDir([匹配url],[当前类下的函数名]);|HOOK某个url【目录制】|$this->route("/static","static_function");| |$this->default([当前类下的函数名]);|当无法匹配到上面的url时,就调用这个地方的函数,类似于switch里面的default,如果没有定义default,则默认进行源站转发,如果返回false,则将会使用框架自带的托管系统,来转发数据到原服务器| $this->default("center");| |$this->get([url])|简单的一个get工具,将会拉取一个网页的源码|$this->get("http://www.baidu.com");| |$this->forword()|把服务器所收到的数据转发到原服务器上面,并返回网页源码|$this->forword();| |$this->addheader()|附加header头部,当使用$this->forword()时会自动加上|$this->addheader("Content-Type: application/json");| |$this->remote_server([url])|设置另一台带有此框架的服务器来拉取原网站源码,解决一台服务器被拉黑的情况|$this->remote_server("http://192.168.1.1/core/proxy?token=123456")| |$this->write([信息])|输出数据,使用这个函数输出,可以输出到日志文件|$this->wirte("Hello world");| |$this->set([变量名],[变量值])|设置类下的某些变量|变量名可选值:debug,ip ## mysql 工具包使用例子 ``` function db_test(){ \Db::init("127.0.0.1","test01","test01","test"); $affectrow=\Db::e("insert into test (`name`) values (?)",time()); $data=\Db::q("select * from test order by id desc limit 10 "); return ["data"=>$data,"row"=>$affectrow]; } ``` ## 版本变更信息 1.0.0.57 ``` 1.修复部分bug 2.添加dir 方法hook 3.添加set_{property} 方法,返回$this对象 ``` 1.0.0.56 ``` 1.添加mysql工具包。内置Db类。 2.增加全局方法add_shutdownList,请勿使用register_shutdown_function。 3.修复烂尾的可视化log页面 ``` 1.0.0.55 ``` 添加user_domain头. ``` ## 其他 1.查看当前框架版本信息:http://任意指向本站的域名/core/show 2.禁止在class里面调用echo ,var_dump,print_r,printf,强行调用的话,在安装的时候会被自动屏蔽掉。 3.对于file_get_contents,file_put_contents做了重定向,重定向的文件目录到 网站根目录/data/[插件名字]/ ## 后续 > 我个人可能会持续发布版本.