# 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/[插件名字]/
## 后续
> 我个人可能会持续发布版本.