mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 04:50:52 +08:00
53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
package util
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
// ApplyCustomHeadersFromAttrs applies user-defined headers stored in the provided attributes map.
|
|
// Custom headers override built-in defaults when conflicts occur.
|
|
func ApplyCustomHeadersFromAttrs(r *http.Request, attrs map[string]string) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
applyCustomHeaders(r, extractCustomHeaders(attrs))
|
|
}
|
|
|
|
func extractCustomHeaders(attrs map[string]string) map[string]string {
|
|
if len(attrs) == 0 {
|
|
return nil
|
|
}
|
|
headers := make(map[string]string)
|
|
for k, v := range attrs {
|
|
if !strings.HasPrefix(k, "header:") {
|
|
continue
|
|
}
|
|
name := strings.TrimSpace(strings.TrimPrefix(k, "header:"))
|
|
if name == "" {
|
|
continue
|
|
}
|
|
val := strings.TrimSpace(v)
|
|
if val == "" {
|
|
continue
|
|
}
|
|
headers[name] = val
|
|
}
|
|
if len(headers) == 0 {
|
|
return nil
|
|
}
|
|
return headers
|
|
}
|
|
|
|
func applyCustomHeaders(r *http.Request, headers map[string]string) {
|
|
if r == nil || len(headers) == 0 {
|
|
return
|
|
}
|
|
for k, v := range headers {
|
|
if k == "" || v == "" {
|
|
continue
|
|
}
|
|
r.Header.Set(k, v)
|
|
}
|
|
}
|