Feat: add custom headers for http outbound

This commit is contained in:
PuerNya 2023-04-10 11:29:53 +08:00
parent da82a41697
commit 6dc8ca3df4
2 changed files with 14 additions and 4 deletions

View File

@ -30,4 +30,5 @@ type HTTPOutboundOptions struct {
Username string `json:"username,omitempty"` Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"` Password string `json:"password,omitempty"`
TLS *OutboundTLSOptions `json:"tls,omitempty"` TLS *OutboundTLSOptions `json:"tls,omitempty"`
Headers map[string]Listable[string] `json:"headers,omitempty"`
} }

View File

@ -3,6 +3,7 @@ package outbound
import ( import (
"context" "context"
"net" "net"
H "net/http"
"os" "os"
"github.com/sagernet/sing-box/adapter" "github.com/sagernet/sing-box/adapter"
@ -29,6 +30,14 @@ func NewHTTP(router adapter.Router, logger log.ContextLogger, tag string, option
if err != nil { if err != nil {
return nil, err return nil, err
} }
var headers H.Header
headers = make(H.Header)
for key, valueList := range options.Headers {
headers.Set(key, valueList[0])
for _, value := range valueList[1:]{
headers.Add(key, value)
}
}
return &HTTP{ return &HTTP{
myOutboundAdapter{ myOutboundAdapter{
protocol: C.TypeHTTP, protocol: C.TypeHTTP,
@ -37,7 +46,7 @@ func NewHTTP(router adapter.Router, logger log.ContextLogger, tag string, option
logger: logger, logger: logger,
tag: tag, tag: tag,
}, },
http.NewClient(detour, options.ServerOptions.Build(), options.Username, options.Password, nil), http.NewClient(detour, options.ServerOptions.Build(), options.Username, options.Password, headers),
}, nil }, nil
} }