mirror of
https://github.com/gospider007/requests.git
synced 2025-12-24 13:57:52 +08:00
optimize http headers
This commit is contained in:
2
go.mod
2
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
|
||||
)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user