添加国外服务器负责请求中继请求

This commit is contained in:
junleea 2025-04-28 22:01:22 +08:00
parent e3a5d6e49a
commit 2e671421fe
3 changed files with 85 additions and 0 deletions

View File

@ -71,6 +71,8 @@ func SetUpToolGroup(router *gin.Engine) {
toolGroup.POST("/spark_create_outline", CreateSparkPPTSOutline)
toolGroup.POST("/spark_create_ppt", CreateSparkPPT)
toolGroup.POST("/spark_ppt_create_status", GetSparkCreatePPTStatus)
//国外服务器处理请求
toolGroup.POST("/online_server_request", HandleOnlineServerRequest)
}
func SetDeviceStatusV2(c *gin.Context) {
@ -849,3 +851,23 @@ func handleThirdPartyCallback(c *gin.Context) {
resp.Message = "success"
c.JSON(http.StatusOK, resp)
}
func HandleOnlineServerRequest(c *gin.Context) {
var req proto.OnlineServerReq
var resp proto.GenerateResp
if err := c.ShouldBind(&req); err == nil {
respData, err2 := service.DoRequestToForeignServer(&req)
if err2 != nil {
resp.Code = proto.OperationFailed
resp.Message = err2.Error()
} else {
resp.Code = proto.SuccessCode
resp.Message = "success"
resp.Data = respData
}
} else {
resp.Code = proto.ParameterError
resp.Message = "参数错误"
}
c.JSON(http.StatusOK, resp)
}

View File

@ -140,3 +140,25 @@ type GitHubUserInfo struct {
AvatarUrl string `json:"avatar_url"` //头像
Url string `json:"url"` // 用户主页
}
// 国外服务器负责请求的请求
type OnlineServerReq struct {
Type string `json:"type"` // 请求类型,get,post
Url string `json:"url"` // 请求地址
Data any `json:"data"` // 请求数据
Header []OutlineServerReqData `json:"header"` // 请求头
}
type OutlineServerReqData struct {
Key string `json:"key"` // 请求的key
Value string `json:"value"` // 请求的值
}
type OnlineServerRespData struct {
Response string `json:"response"` // 响应数据
}
type OutlineServerResp struct {
Request OnlineServerReq `json:"request"` // 请求
Response OnlineServerRespData `json:"response"` // 响应
}

View File

@ -5,6 +5,7 @@ import (
"StuAcaWorksAI/proto"
"StuAcaWorksAI/worker"
"encoding/json"
"errors"
"fmt"
"github.com/golang-jwt/jwt"
"log"
@ -449,3 +450,43 @@ func DoGoogleCallBack(state *proto.ThirdPartyLoginState, code string) {
log.Println("do handle gitee callback success, third party login status:", string(thirdPartyLoginStatusStr))
worker.SetRedisWithExpire(state.UUID, string(thirdPartyLoginStatusStr), time.Minute*10)
}
// 国外服务器处理国内服务器要请求外网的请求
func DoRequestToForeignServer(req *proto.OnlineServerReq) (proto.OutlineServerResp, error) {
var resp proto.OutlineServerResp
resp.Request = *req
switch req.Type {
case "get":
headers := make(map[string]string)
for _, v := range req.Header {
headers[v.Key] = v.Value
}
err2, respBytes := worker.DoGetRequest(req.Url, headers)
if err2 != nil {
log.Println("DoRequestToForeignServer get error:", err2)
return resp, err2
}
resp.Response.Response = string(respBytes)
case "post":
headers := make(map[string]string)
for _, v := range req.Header {
headers[v.Key] = v.Value
}
dataBytes, err := json.Marshal(req.Data)
if err != nil {
log.Println("DoRequestToForeignServer post error:", err)
break
}
err2, respBytes := worker.DoPostRequestJSON(req.Url, dataBytes, headers)
if err2 != nil {
log.Println("DoRequestToForeignServer get error:", err2)
return resp, err2
}
resp.Response.Response = string(respBytes)
default:
log.Println("DoRequestToForeignServer type error:", req.Type)
return resp, errors.New("request type error")
}
return resp, nil
}