| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package service
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "net/http"
- "one-api/common"
- "one-api/setting"
- "strings"
- )
- // WorkerRequest Worker请求的数据结构
- type WorkerRequest struct {
- URL string `json:"url"`
- Key string `json:"key"`
- Method string `json:"method,omitempty"`
- Headers map[string]string `json:"headers,omitempty"`
- Body json.RawMessage `json:"body,omitempty"`
- }
- // DoWorkerRequest 通过Worker发送请求
- func DoWorkerRequest(req *WorkerRequest) (*http.Response, error) {
- if !setting.EnableWorker() {
- return nil, fmt.Errorf("worker not enabled")
- }
- if !setting.WorkerAllowHttpImageRequestEnabled && !strings.HasPrefix(req.URL, "https") {
- return nil, fmt.Errorf("only support https url")
- }
- workerUrl := setting.WorkerUrl
- if !strings.HasSuffix(workerUrl, "/") {
- workerUrl += "/"
- }
- // 序列化worker请求数据
- workerPayload, err := json.Marshal(req)
- if err != nil {
- return nil, fmt.Errorf("failed to marshal worker payload: %v", err)
- }
- return http.Post(workerUrl, "application/json", bytes.NewBuffer(workerPayload))
- }
- func DoDownloadRequest(originUrl string) (resp *http.Response, err error) {
- if setting.EnableWorker() {
- common.SysLog(fmt.Sprintf("downloading file from worker: %s", originUrl))
- req := &WorkerRequest{
- URL: originUrl,
- Key: setting.WorkerValidKey,
- }
- return DoWorkerRequest(req)
- } else {
- common.SysLog(fmt.Sprintf("downloading from origin: %s", originUrl))
- return http.Get(originUrl)
- }
- }
|