From b4f41b658e4f6eecf789b77f567e526958aef414 Mon Sep 17 00:00:00 2001 From: orzogc Date: Thu, 14 Oct 2021 15:08:52 +0800 Subject: [PATCH] add proxy support, fix #17 --- go.mod | 8 ++++---- go.sum | 20 ++++++++++++-------- main.go | 29 +++++++++++++++++++++++++++-- multipart.go | 2 +- oss.go | 15 ++++++++++++++- 5 files changed, 58 insertions(+), 16 deletions(-) diff --git a/go.mod b/go.mod index d9deb74..bbe5996 100644 --- a/go.mod +++ b/go.mod @@ -4,17 +4,17 @@ go 1.16 require ( github.com/VividCortex/ewma v1.2.0 // indirect - github.com/aliyun/aliyun-oss-go-sdk v2.1.9+incompatible + github.com/aliyun/aliyun-oss-go-sdk v2.1.10+incompatible github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect github.com/cheggaaa/pb/v3 v3.0.8 github.com/eiannone/keyboard v0.0.0-20200508000154-caf4b762e807 - github.com/fatih/color v1.12.0 // indirect - github.com/mattn/go-isatty v0.0.13 // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/mattn/go-colorable v0.1.11 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect github.com/satori/go.uuid v1.2.0 // indirect github.com/valyala/fastjson v1.6.3 - golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect + golang.org/x/sys v0.0.0-20211013075003-97ac67df715c // indirect golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect ) diff --git a/go.sum b/go.sum index d9a5b70..3a748eb 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,8 @@ github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA= github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= -github.com/aliyun/aliyun-oss-go-sdk v2.1.9+incompatible h1:mO8fA9l5cQ7r0D2v3WribTT1GGbNVtnVviKM51jH6lI= -github.com/aliyun/aliyun-oss-go-sdk v2.1.9+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= +github.com/aliyun/aliyun-oss-go-sdk v2.1.10+incompatible h1:D3gwOr9qUUmyyBRDbpnATqu+EkqqmigFd3Od6xO1QUU= +github.com/aliyun/aliyun-oss-go-sdk v2.1.10+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f h1:ZNv7On9kyUzm7fvRZumSyy/IUiSC7AzL0I1jKKtwooA= github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= github.com/cheggaaa/pb/v3 v3.0.8 h1:bC8oemdChbke2FHIIGy9mn4DPJ2caZYQnfbRqwmdCoA= @@ -10,16 +10,18 @@ github.com/cheggaaa/pb/v3 v3.0.8/go.mod h1:UICbiLec/XO6Hw6k+BHEtHeQFzzBH4i2/qk/o github.com/eiannone/keyboard v0.0.0-20200508000154-caf4b762e807 h1:jdjd5e68T4R/j4PWxfZqcKY8KtT9oo8IPNVuV4bSXDQ= github.com/eiannone/keyboard v0.0.0-20200508000154-caf4b762e807/go.mod h1:Xoiu5VdKMvbRgHuY7+z64lhu/7lvax/22nzASF6GrO8= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.12.0 h1:mRhaKNwANqRgUBGKmnI5ZxEk7QXmjQeCcuYFMX2bfcc= -github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.11 h1:nQ+aFkoE2TMGc0b68U2OKSexC+eq46+XwZzWXHRmPYs= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= @@ -35,8 +37,10 @@ github.com/valyala/fastjson v1.6.3/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLr golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211013075003-97ac67df715c h1:taxlMj0D/1sOAuv/CbSD+MMDof2vbyPTqz5FNYKpXt8= +golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= diff --git a/main.go b/main.go index e765896..d26d4e5 100644 --- a/main.go +++ b/main.go @@ -9,10 +9,12 @@ import ( "io/ioutil" "log" "net/http" + "net/url" "os" "os/signal" "path/filepath" "strconv" + "strings" "syscall" "time" @@ -32,7 +34,7 @@ const ( listFileURL = "https://webapi.115.com/files?aid=1&cid=%d&o=user_ptime&asc=0&offset=0&show_dir=0&limit=%d&natsort=1&format=json" downloadURL = "https://proapi.115.com/app/chrome/downurl" orderURL = "https://webapi.115.com/files/order" - appVer = "26.2.2" + appVer = "29.0.0" userAgent = "Mozilla/5.0 115disk/" + appVer endString = "000000" aliUserAgent = "aliyun-sdk-android/2.9.1" @@ -60,7 +62,12 @@ var ( errStopUpload = errors.New("暂停上传") quit = make(chan struct{}) multipartCh = make(chan struct{}) - httpClient = &http.Client{} + httpClient = &http.Client{ + Timeout: 20 * time.Second, + } + proxyHost string + proxyUser string + proxyPassword string ) // 设置数据 @@ -383,6 +390,24 @@ func initialize() (e error) { log.Printf("排序文件夹 %d 成功", config.CID) } + // http代理,优先使用 https_proxy + proxy := strings.TrimSpace(os.Getenv("https_proxy")) + if proxy == "" { + proxy = strings.TrimSpace(os.Getenv("http_proxy")) + } + if proxy != "" { + proxyURL, err := url.Parse(proxy) + if err == nil { + proxyHost = "//" + proxyURL.Host + if proxyURL.User != nil { + proxyUser = proxyURL.User.Username() + if password, b := proxyURL.User.Password(); b { + proxyPassword = password + } + } + } + } + return nil } diff --git a/multipart.go b/multipart.go index 0fe60e2..5a12a8c 100644 --- a/multipart.go +++ b/multipart.go @@ -52,7 +52,7 @@ func getBucket(bucketName string) (ot *ossToken, bucket *oss.Bucket, e error) { ot, err := getOSSToken() checkErr(err) - client, err := oss.New(ot.endpoint, ot.AccessKeyID, ot.AccessKeySecret) + client, err := oss.New(ot.endpoint, ot.AccessKeyID, ot.AccessKeySecret, getClientOptions()...) checkErr(err) bucket, err = client.Bucket(bucketName) checkErr(err) diff --git a/oss.go b/oss.go index 476d8ae..6c990d2 100644 --- a/oss.go +++ b/oss.go @@ -150,6 +150,19 @@ func getOSSToken() (token *ossToken, e error) { return token, nil } +// 获取oss客户端选项 +func getClientOptions() (options []oss.ClientOption) { + if proxyHost != "" { + if proxyUser != "" { + options = append(options, oss.AuthProxy(proxyHost, proxyUser, proxyPassword)) + } else { + options = append(options, oss.Proxy(proxyHost)) + } + } + + return options +} + // 利用oss的接口上传文件 func ossUploadFile(ft *fastToken, file string) (e error) { defer func() { @@ -162,7 +175,7 @@ func ossUploadFile(ft *fastToken, file string) (e error) { ot, err := getOSSToken() checkErr(err) - client, err := oss.New(ot.endpoint, ot.AccessKeyID, ot.AccessKeySecret) + client, err := oss.New(ot.endpoint, ot.AccessKeyID, ot.AccessKeySecret, getClientOptions()...) checkErr(err) bucket, err := client.Bucket(ft.Bucket) checkErr(err)