Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 27 additions & 3 deletions relay/adaptor/common.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package adaptor

import (
"bytes"
"context"
"errors"
"fmt"
"io"
"net/http"
"strings"

"github.com/gin-gonic/gin"
"github.com/songquanpeng/one-api/common/client"
"github.com/songquanpeng/one-api/relay/meta"
"io"
"net/http"
)

func SetupCommonRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) {
Expand All @@ -18,12 +22,32 @@ func SetupCommonRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta
}
}

func NewReusableRequest(ctx context.Context, method, url string, body io.Reader) (*http.Request, error) {
switch v := body.(type) {
case *bytes.Buffer, *bytes.Reader, *strings.Reader:
return http.NewRequestWithContext(ctx, method, url, v) // 标准库会自动填 GetBody
default:
data, err := io.ReadAll(body)
if err != nil {
return nil, err
}
req, err := http.NewRequestWithContext(ctx, method, url, bytes.NewReader(data))
if err != nil {
return nil, err
}
req.GetBody = func() (io.ReadCloser, error) {
return io.NopCloser(bytes.NewReader(data)), nil
}
return req, nil
}
}

func DoRequestHelper(a Adaptor, c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {
fullRequestURL, err := a.GetRequestURL(meta)
if err != nil {
return nil, fmt.Errorf("get request url failed: %w", err)
}
req, err := http.NewRequest(c.Request.Method, fullRequestURL, requestBody)
req, err := NewReusableRequest(c.Request.Context(), c.Request.Method, fullRequestURL, requestBody)
if err != nil {
return nil, fmt.Errorf("new request failed: %w", err)
}
Expand Down
Loading