diff --git a/go.mod b/go.mod index df26799..49cc3d4 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,6 @@ require ( github.com/refraction-networking/utls v1.5.4 golang.org/x/exp v0.0.0-20231006140011-7918f672742d golang.org/x/net v0.17.0 - golang.org/x/text v0.13.0 ) require ( @@ -40,5 +39,6 @@ require ( golang.org/x/crypto v0.14.0 // indirect golang.org/x/image v0.13.0 // indirect golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect nhooyr.io/websocket v1.8.9 // indirect ) diff --git a/headers.go b/headers.go index 5b47042..1c9fc17 100644 --- a/headers.go +++ b/headers.go @@ -2,7 +2,6 @@ package requests import ( "errors" - "net/http" "github.com/gospider007/gson" @@ -14,10 +13,10 @@ var AcceptLanguage = "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6" // 请求操作========================================================================= start func DefaultHeaders() http.Header { return http.Header{ - "Accept-Encoding": []string{"gzip, deflate, br"}, - "Accept": []string{"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"}, - "Accept-Language": []string{AcceptLanguage}, "User-Agent": []string{UserAgent}, + "Accept": []string{"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"}, + "Accept-Encoding": []string{"gzip, deflate, br"}, + "Accept-Language": []string{AcceptLanguage}, } } func (obj *RequestOption) initHeaders() error { diff --git a/roundTripper.go b/roundTripper.go index 4341c9b..4ecf7b3 100644 --- a/roundTripper.go +++ b/roundTripper.go @@ -9,6 +9,7 @@ import ( "fmt" "io" "net" + "net/textproto" "net/url" "sort" "sync" @@ -22,8 +23,6 @@ import ( "github.com/gospider007/tools" utls "github.com/refraction-networking/utls" "golang.org/x/exp/slices" - "golang.org/x/text/cases" - "golang.org/x/text/language" ) type roundTripper interface { @@ -326,12 +325,11 @@ func (obj *Connecotr) wrapBody(task *reqTask) { type orderHeadersConn struct { w io.Writer raw []byte - fin bool orderHeaders []string } func (obj *orderHeadersConn) Write(p []byte) (n int, err error) { - if obj.fin { + if obj.raw == nil { return obj.w.Write(p) } obj.raw = append(obj.raw, p...) @@ -341,20 +339,14 @@ func (obj *orderHeadersConn) Write(p []byte) (n int, err error) { sort.Slice(kvs, func(i, j int) bool { iIndex := bytes.Index(kvs[i], []byte{':'}) jIndex := bytes.Index(kvs[j], []byte{':'}) - if iIndex == -1 && jIndex == -1 { + if iIndex == -1 || jIndex == -1 { return false - } else if iIndex == -1 { - return false - } else if jIndex == -1 { - return true - } else { - return slices.Index(obj.orderHeaders, tools.BytesToString(kvs[i][:iIndex])) > slices.Index(obj.orderHeaders, tools.BytesToString(kvs[j][:jIndex])) } + return slices.Index(obj.orderHeaders, tools.BytesToString(kvs[i][:iIndex])) > slices.Index(obj.orderHeaders, tools.BytesToString(kvs[j][:jIndex])) }) copy(obj.raw[firstIndex:lastIndex], bytes.Join(kvs, []byte{'\r', '\n'})) } _, err = obj.w.Write(obj.raw) - obj.fin = true obj.raw = nil } return len(p), err @@ -362,12 +354,11 @@ func (obj *orderHeadersConn) Write(p []byte) (n int, err error) { func (obj *Connecotr) http1Req(task *reqTask) { defer task.cnl() - if task.orderHeaders != nil { - total := len(task.orderHeaders) * 2 - orderHeaders := make([]string, total) + if task.orderHeaders != nil && len(task.orderHeaders) > 0 { + orderHeaders := make([]string, len(task.orderHeaders)) + total := len(task.orderHeaders) - 1 for i, val := range task.orderHeaders { - orderHeaders[total-(i*2+1)] = val - orderHeaders[total-(i*2+2)] = cases.Title(language.Und, cases.NoLower).String(val) + orderHeaders[total-i] = textproto.CanonicalMIMEHeaderKey(val) } task.err = task.req.Write(&orderHeadersConn{w: obj, raw: []byte{}, orderHeaders: orderHeaders}) } else {