diff --git a/drivers/189/driver.go b/drivers/189/driver.go index e8b263a5..af15cf3c 100644 --- a/drivers/189/driver.go +++ b/drivers/189/driver.go @@ -171,7 +171,12 @@ func (driver Cloud189) Link(args base.Args, account *model.Account) (*base.Link, if err != nil { return nil, err } - link := base.Link{} + link := base.Link{ + Headers: []base.Header{ + {Name: "User-Agent", Value: base.UserAgent}, + {Name: "Authorization", Value: ""}, + }, + } if res.StatusCode() == 302 { link.Url = res.Header().Get("location") } else { diff --git a/drivers/189/util.go b/drivers/189/util.go index 129fb882..9e84f03a 100644 --- a/drivers/189/util.go +++ b/drivers/189/util.go @@ -115,7 +115,7 @@ func EncodeParam(v url.Values) string { } buf.WriteString(k) buf.WriteByte('=') - buf.WriteString(v) + buf.WriteString(strings.ReplaceAll(v, "&", "%26")) } } return buf.String() diff --git a/drivers/base/driver.go b/drivers/base/driver.go index 1be5480c..e9a77588 100644 --- a/drivers/base/driver.go +++ b/drivers/base/driver.go @@ -160,6 +160,7 @@ func GetDrivers() map[string][]Item { var NoRedirectClient *resty.Client var RestyClient = resty.New() var HttpClient = &http.Client{} +var UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" func init() { NoRedirectClient = resty.New().SetRedirectPolicy( @@ -167,8 +168,7 @@ func init() { return http.ErrUseLastResponse }), ) - userAgent := "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" - NoRedirectClient.SetHeader("user-agent", userAgent) - RestyClient.SetHeader("user-agent", userAgent) + NoRedirectClient.SetHeader("user-agent", UserAgent) + RestyClient.SetHeader("user-agent", UserAgent) RestyClient.SetRetryCount(3) } diff --git a/server/controllers/proxy.go b/server/controllers/proxy.go index 0ffd8ac8..1fd2d9f6 100644 --- a/server/controllers/proxy.go +++ b/server/controllers/proxy.go @@ -11,6 +11,7 @@ import ( "github.com/go-resty/resty/v2" log "github.com/sirupsen/logrus" "io" + "io/ioutil" "net/http" "net/url" "os" @@ -117,12 +118,14 @@ func Proxy(c *gin.Context) { common.ErrorResp(c, err, 500) return } + log.Debugf("%+v", r.Header) for h, val := range r.Header { req.Header[h] = val } for _, header := range link.Headers { req.Header.Set(header.Name, header.Value) } + log.Debugf("%+v", req.Header) res, err := HttpClient.Do(req) if err != nil { common.ErrorResp(c, err, 500) @@ -133,6 +136,12 @@ func Proxy(c *gin.Context) { }() log.Debugf("proxy status: %d", res.StatusCode) w.WriteHeader(res.StatusCode) + if res.StatusCode >= 400 { + all, _ := ioutil.ReadAll(res.Body) + log.Debugln(string(all)) + common.ErrorStrResp(c, string(all), 500) + return + } for h, v := range res.Header { w.Header()[h] = v }