From f6be50f15a5b6e52df00ba69800e07c98387fc7d Mon Sep 17 00:00:00 2001 From: Noah Hsu Date: Tue, 31 May 2022 16:03:54 +0800 Subject: [PATCH 1/2] fix(189): login and get link (close #1182) --- drivers/189/189.go | 16 +++++++++------- drivers/189/driver.go | 15 ++++++++++----- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/drivers/189/189.go b/drivers/189/189.go index 069c13cd..fe611adf 100644 --- a/drivers/189/189.go +++ b/drivers/189/189.go @@ -7,13 +7,6 @@ import ( "encoding/hex" "errors" "fmt" - "github.com/Xhofe/alist/conf" - "github.com/Xhofe/alist/drivers/base" - "github.com/Xhofe/alist/model" - "github.com/Xhofe/alist/utils" - "github.com/go-resty/resty/v2" - jsoniter "github.com/json-iterator/go" - log "github.com/sirupsen/logrus" "io" "math" "net/http" @@ -21,6 +14,14 @@ import ( "strconv" "strings" "time" + + "github.com/Xhofe/alist/conf" + "github.com/Xhofe/alist/drivers/base" + "github.com/Xhofe/alist/model" + "github.com/Xhofe/alist/utils" + "github.com/go-resty/resty/v2" + jsoniter "github.com/json-iterator/go" + log "github.com/sirupsen/logrus" ) var client189Map map[string]*resty.Client @@ -98,6 +99,7 @@ func (driver Cloud189) Login(account *model.Account) error { client.SetTimeout(base.DefaultTimeout) client.SetRetryCount(3) client.SetHeader("Referer", "https://cloud.189.cn/") + client.SetHeader("User-Agent", base.UserAgent) url := "https://cloud.189.cn/api/portal/loginUrl.action?redirectURL=https%3A%2F%2Fcloud.189.cn%2Fmain.action" b := "" lt := "" diff --git a/drivers/189/driver.go b/drivers/189/driver.go index 5cab1f76..1b9ab510 100644 --- a/drivers/189/driver.go +++ b/drivers/189/driver.go @@ -2,15 +2,16 @@ package _89 import ( "fmt" + "net/http" + "path/filepath" + "strings" + "github.com/Xhofe/alist/conf" "github.com/Xhofe/alist/drivers/base" "github.com/Xhofe/alist/model" "github.com/Xhofe/alist/utils" "github.com/go-resty/resty/v2" log "github.com/sirupsen/logrus" - "net/http" - "path/filepath" - "strings" ) type Cloud189 struct{} @@ -179,23 +180,27 @@ func (driver Cloud189) Link(args base.Args, account *model.Account) (*base.Link, resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse })) - res, err := client.R().Get("https:" + resp.FileDownloadUrl) + res, err := client.R().SetHeader("User-Agent", base.UserAgent).Get("https:" + resp.FileDownloadUrl) if err != nil { return nil, err } log.Debugln(res.Status()) + log.Debugln(res.String()) link := base.Link{ Headers: []base.Header{ {Name: "User-Agent", Value: base.UserAgent}, //{Name: "Authorization", Value: ""}, }, } + log.Debugln("first url:", resp.FileDownloadUrl) if res.StatusCode() == 302 { link.Url = res.Header().Get("location") - res, err = client.R().Get(link.Url) + log.Debugln("second url:", link.Url) + _, _ = client.R().Get(link.Url) if res.StatusCode() == 302 { link.Url = res.Header().Get("location") } + log.Debugln("third url:", link.Url) } else { link.Url = resp.FileDownloadUrl } From 7c6d8ca2229e06ab69ac6199f6116f99b4b70ea8 Mon Sep 17 00:00:00 2001 From: XZB Date: Thu, 2 Jun 2022 18:13:17 +0800 Subject: [PATCH 2/2] fix(proxy): filename is urlencoded when using Safari --- server/common/proxy.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/common/proxy.go b/server/common/proxy.go index e6a2174e..ed8ee2c4 100644 --- a/server/common/proxy.go +++ b/server/common/proxy.go @@ -26,7 +26,7 @@ func Proxy(w http.ResponseWriter, r *http.Request, link *base.Link, file *model. _ = link.Data.Close() }() w.Header().Set("Content-Type", "application/octet-stream") - w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename=%s`, file.Name)) + w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"; filename*=UTF-8''%s`, file.Name, url.QueryEscape(file.Name))) w.Header().Set("Content-Length", strconv.FormatInt(file.Size, 10)) if link.Header != nil { for h, val := range link.Header { @@ -57,7 +57,7 @@ func Proxy(w http.ResponseWriter, r *http.Request, link *base.Link, file *model. if err != nil { return err } - w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename=%s`, url.QueryEscape(file.Name))) + w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"; filename*=UTF-8''%s`, file.Name, url.QueryEscape(file.Name))) http.ServeContent(w, r, file.Name, fileStat.ModTime(), f) return nil } else {