diff --git a/drivers/123/driver.go b/drivers/123/driver.go index ea2ef150..4dcedde7 100644 --- a/drivers/123/driver.go +++ b/drivers/123/driver.go @@ -98,7 +98,7 @@ func (d *Pan123) Link(ctx context.Context, file model.Obj, args model.LinkArgs) } u_ := u.String() log.Debug("download url: ", u_) - res, err := base.NoRedirectClient.R().Get(u_) + res, err := base.NoRedirectClient.R().SetHeader("Referer", "https://www.123pan.com/").Get(u_) if err != nil { return nil, err } @@ -112,6 +112,9 @@ func (d *Pan123) Link(ctx context.Context, file model.Obj, args model.LinkArgs) } else if res.StatusCode() == 200 { link.URL = utils.Json.Get(res.Body(), "data", "redirect_url").ToString() } + link.Header = http.Header{ + "Referer": []string{"https://www.123pan.com/"}, + } return &link, nil } else { return nil, fmt.Errorf("can't convert obj") @@ -235,6 +238,7 @@ func (d *Pan123) Put(ctx context.Context, dstDir model.Obj, stream model.FileStr } if resp.Data.AccessKeyId == "" || resp.Data.SecretAccessKey == "" || resp.Data.SessionToken == "" { err = d.newUpload(ctx, &resp, stream, uploadFile, up) + return err } else { cfg := &aws.Config{ Credentials: credentials.NewStaticCredentials(resp.Data.AccessKeyId, resp.Data.SecretAccessKey, resp.Data.SessionToken), diff --git a/drivers/123/upload.go b/drivers/123/upload.go index 81aefb41..a5b65fef 100644 --- a/drivers/123/upload.go +++ b/drivers/123/upload.go @@ -34,14 +34,17 @@ func (d *Pan123) getS3PreSignedUrls(ctx context.Context, upReq *UploadResp, star return &s3PreSignedUrls, nil } -func (d *Pan123) completeS3(ctx context.Context, upReq *UploadResp) error { +func (d *Pan123) completeS3(ctx context.Context, upReq *UploadResp, file model.FileStreamer, isMultipart bool) error { data := base.Json{ + "StorageNode": upReq.Data.StorageNode, "bucket": upReq.Data.Bucket, + "fileId": upReq.Data.FileId, + "fileSize": file.GetSize(), + "isMultipart": isMultipart, "key": upReq.Data.Key, "uploadId": upReq.Data.UploadId, - "StorageNode": upReq.Data.StorageNode, } - _, err := d.request(S3Complete, http.MethodPost, func(req *resty.Request) { + _, err := d.request(UploadCompleteV2, http.MethodPost, func(req *resty.Request) { req.SetBody(data).SetContext(ctx) }, nil) return err @@ -83,7 +86,7 @@ func (d *Pan123) newUpload(ctx context.Context, upReq *UploadResp, file model.Fi } } // complete s3 upload - return d.completeS3(ctx, upReq) + return d.completeS3(ctx, upReq, file, chunkCount > 1) } func (d *Pan123) uploadS3Chunk(ctx context.Context, upReq *UploadResp, s3PreSignedUrls *S3PreSignedURLs, cur, end int, reader io.Reader, curSize int64, retry bool) error { diff --git a/drivers/123/util.go b/drivers/123/util.go index 49587a86..b9d27cf3 100644 --- a/drivers/123/util.go +++ b/drivers/123/util.go @@ -15,19 +15,23 @@ import ( // do others that not defined in Driver interface const ( - API = "https://www.123pan.com/b/api" - SignIn = API + "/user/sign_in" - UserInfo = API + "/user/info" - FileList = API + "/file/list/new" - DownloadInfo = "https://www.123pan.com/a/api/file/download_info" - Mkdir = API + "/file/upload_request" - Move = API + "/file/mod_pid" - Rename = API + "/file/rename" - Trash = API + "/file/trash" - UploadRequest = API + "/file/upload_request" - UploadComplete = API + "/file/upload_complete" - S3PreSignedUrls = API + "/file/s3_repare_upload_parts_batch" - S3Complete = API + "/file/s3_complete_multipart_upload" + AApi = "https://www.123pan.com/a/api" + BApi = "https://www.123pan.com/b/api" + MainApi = AApi + SignIn = MainApi + "/user/sign_in" + UserInfo = MainApi + "/user/info" + FileList = MainApi + "/file/list/new" + DownloadInfo = MainApi + "/file/download_info" + Mkdir = MainApi + "/file/upload_request" + Move = MainApi + "/file/mod_pid" + Rename = MainApi + "/file/rename" + Trash = MainApi + "/file/trash" + UploadRequest = MainApi + "/file/upload_request" + UploadComplete = MainApi + "/file/upload_complete" + S3PreSignedUrls = MainApi + "/file/s3_repare_upload_parts_batch" + S3Auth = MainApi + "/file/s3_upload_object/auth" + UploadCompleteV2 = MainApi + "/file/upload_complete/v2" + S3Complete = MainApi + "/file/s3_complete_multipart_upload" ) func (d *Pan123) login() error { @@ -42,6 +46,7 @@ func (d *Pan123) login() error { body = base.Json{ "passport": d.Username, "password": d.Password, + "remember": true, } } res, err := base.RestyClient.R(). @@ -61,6 +66,7 @@ func (d *Pan123) request(url string, method string, callback base.ReqCallback, r req := base.RestyClient.R() req.SetHeaders(map[string]string{ "origin": "https://www.123pan.com", + "referer": "https://www.123pan.com/", "authorization": "Bearer " + d.AccessToken, "platform": "web", "app-version": "1.2",