🎨 Add kernel API /api/network/forwardProxy https://github.com/siyuan-note/siyuan/issues/8724

This commit is contained in:
Daniel 2023-07-10 23:21:04 +08:00
parent c78cbe067d
commit 5d7c6d47bf
No known key found for this signature in database
GPG Key ID: 86211BA83DF03017
3 changed files with 106 additions and 9 deletions

48
API.md
View File

@ -52,6 +52,8 @@
* [Notification](#Notification) * [Notification](#Notification)
* [Push message](#Push-message) * [Push message](#Push-message)
* [Push error message](#Push-error-message) * [Push error message](#Push-error-message)
* [Network](#Network)
* [Forward proxy](#Forward-proxy)
* [System](#System) * [System](#System)
* [Get boot progress](#Get-boot-progress) * [Get boot progress](#Get-boot-progress)
* [Get system version](#Get-system-version) * [Get system version](#Get-system-version)
@ -1207,6 +1209,52 @@ View API token in <kbd>Settings - About</kbd>, request header: `Authorization: T
``` ```
* `id`: Message ID * `id`: Message ID
## Network
### Forward proxy
* `/api/network/forkProxy`
* Parameters
```json
{
"url": "https://b3log.org/siyuan/",
"method": "GET",
"timeout": 7000,
"contentType": "text/html",
"headers": [
{
"Cookie": ""
}
],
"payload": {}
}
```
* `url`: URL to forward
* `method`: HTTP method, default is `POST`
* `timeout`: timeout in milliseconds, default is `7000`
* `contentType`: Content-Type, default is `application/json`
* `headers`: HTTP headers
* `payload`: HTTP payload, object or string
* Return value
```json
{
"code": 0,
"msg": "",
"data": {
"body": "",
"contentType": "text/html",
"elapsed": 1976,
"headers": {
},
"status": 200,
"url": "https://b3log.org/siyuan"
}
}
```
## System ## System
### Get boot progress ### Get boot progress

View File

@ -52,6 +52,8 @@
* [通知](#通知) * [通知](#通知)
* [推送消息](#推送消息) * [推送消息](#推送消息)
* [推送报错消息](#推送报错消息) * [推送报错消息](#推送报错消息)
* [网络](#网络)
* [正向代理](#正向代理)
* [系统](#系统) * [系统](#系统)
* [获取启动进度](#获取启动进度) * [获取启动进度](#获取启动进度)
* [获取系统版本](#获取系统版本) * [获取系统版本](#获取系统版本)
@ -1197,6 +1199,52 @@
``` ```
* `id`:消息 ID * `id`:消息 ID
## 网络
### 正向代理
* `/api/network/forkProxy`
* 参数
```json
{
"url": "https://b3log.org/siyuan/",
"method": "GET",
"timeout": 7000,
"contentType": "text/html",
"headers": [
{
"Cookie": ""
}
],
"payload": {}
}
```
* `url`:转发的 URL
* `method`HTTP 方法,默认为 `GET`
* `timeout`:超时时间,单位为毫秒,默认为 `7000` 毫秒
* `contentType`HTTP Content-Type默认为 `application/json`
* `headers`HTTP 请求标头
* `payload`HTTP 请求体,对象或者是字符串
* 返回值
```json
{
"code": 0,
"msg": "",
"data": {
"body": "",
"contentType": "text/html",
"elapsed": 1976,
"headers": {
},
"status": 200,
"url": "https://b3log.org/siyuan"
}
}
```
## 系统 ## 系统
### 获取启动进度 ### 获取启动进度

View File

@ -46,10 +46,12 @@ func forwardProxy(c *gin.Context) {
return return
} }
method := strings.ToUpper(arg["method"].(string)) method := "POST"
timeoutArg := arg["timeout"] if methodArg := arg["method"]; nil != methodArg {
method = strings.ToUpper(methodArg.(string))
}
timeout := 7 * 1000 timeout := 7 * 1000
if nil != timeoutArg { if timeoutArg := arg["timeout"]; nil != timeoutArg {
timeout = int(timeoutArg.(float64)) timeout = int(timeoutArg.(float64))
if 1 > timeout { if 1 > timeout {
timeout = 7 * 1000 timeout = 7 * 1000
@ -66,14 +68,13 @@ func forwardProxy(c *gin.Context) {
} }
} }
contentType := arg["contentType"] contentType := "application/json"
if nil != contentType && "" != contentType { if contentTypeArg := arg["contentType"]; nil != contentTypeArg {
request.SetHeader("Content-Type", contentType.(string)) contentType = contentTypeArg.(string)
} }
request.SetHeader("Content-Type", contentType)
if "POST" == method {
request.SetBody(arg["payload"]) request.SetBody(arg["payload"])
}
started := time.Now() started := time.Now()
resp, err := request.Send(method, destURL) resp, err := request.Send(method, destURL)