https://github.com/mic1on/fastrpc
这是一个基于 FastAPI 的 浏览器 RPC 服务端
https://github.com/mic1on/fastrpc
Last synced: 10 months ago
JSON representation
这是一个基于 FastAPI 的 浏览器 RPC 服务端
- Host: GitHub
- URL: https://github.com/mic1on/fastrpc
- Owner: mic1on
- License: apache-2.0
- Created: 2022-07-06T05:01:55.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-08-17T07:32:05.000Z (over 2 years ago)
- Last Synced: 2025-03-18T00:04:05.253Z (10 months ago)
- Language: JavaScript
- Size: 27.3 KB
- Stars: 60
- Watchers: 2
- Forks: 12
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Fast RPC
这是一个基于 FastAPI 的 浏览器 RPC 服务端。
> 此浏览器可以是任何端(pc/手机/平板)的任意浏览器
它提供了一个WS服务和一个HTTP服务。WS服务负责浏览器群和服务端的通信;HTTP服务负责提供一个HTTP接口,用户通过调用接口实现调用远程浏览器群的方法。
此项目主要思路来自于 [sekiro](https://github.com/virjar/sekiro)。项目的初衷是学习并分享学习成果,请勿用于非法用途。
### 作用
当你苦于网站层层加密无法解密时,当你遇到诸如动态cookie加密时,你可以考虑使用此项目,这是解决方案之一。
### 使用
- 方式1:docker
> docker run --name rpc -p 8000:8000 -d miclon/fastrpc
```text
支持环境变量:
WORKERS_PER_CORE: 每个CPU核工作线程数量,默认为1
MAX_WORKERS:工作进程,默认是按CPU核心数量*WORKERS_PER_CORE
```
- 方式2:clone本地运行
1. 首先你需要确保成功运行python主程序`main.py`
2. 将提供给你的`client.js`注入到浏览器中。注入方式作者用的是油猴。
3. 将浏览器打开任意网站,比如百度。(这时候油猴脚本是将client.js注入到页面里的)
4. 此时,你可以在电脑终端中执行:
> curl http://localhost:8000/invoke?action=cookies
当然你也可以POST
> curl -H "Content-Type: application/json" -X POST -d '{"action": "cookies" }' "http://localhost:8000/invoke"
你将在终端看到你访问百度留下的cookies

以上就是一次项目的初体验,如果以上步骤非常顺利,那么你可以继续向下看。
### 新增功能
刚刚看到了,我们在API接口调用了/do/cookies,那是因为我们在`client.js`中注册了此方法名称。
```javascript
client.registerAction("cookies",function(request, resolve,reject ){
resolve(document.cookie);
})
```
所以,顺理成章地,我们可以自定义其他任意操作,比如:
```javascript
client.registerAction("html",function(request, resolve,reject ){
resolve(document.documentElement.outerHTML);
})
```
随后,我们调用:
> curl http://localhost:8000/invoke?action=html -o baidu.txt
ps: -o 输出到文件baidu.txt

### 举例应用场景
##### 某网站登录
其网站登录的时候密码是加密的。

尝试找到调用处。

这里就是它的加密方法。
```javascript
encryptedString(key_to_encode, that.password.val())
```
以往的方式,我们需要进入这个方法,抠出它的实现过程。要么还原要么node调用执行。
现在,不需要这些,直接复制这个加密。
```javascript
client.registerAction("mm",function(request, resolve,reject ){
resolve(encryptedString(key_to_encode, "qq1234"));
})
```
调用:
> curl http://localhost:8000/invoke?action=mm
得到加密结果:

### 更多场景
……