fix(123): add `Referer` to request (close #4631)

pull/4522/head v3.20.0
Andy Hsu 2023-07-04 18:36:46 +08:00
parent 7d20a01dba
commit 5e8bfb017e
3 changed files with 31 additions and 18 deletions

View File

@ -98,7 +98,7 @@ func (d *Pan123) Link(ctx context.Context, file model.Obj, args model.LinkArgs)
} }
u_ := u.String() u_ := u.String()
log.Debug("download url: ", u_) 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 { if err != nil {
return nil, err 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 { } else if res.StatusCode() == 200 {
link.URL = utils.Json.Get(res.Body(), "data", "redirect_url").ToString() link.URL = utils.Json.Get(res.Body(), "data", "redirect_url").ToString()
} }
link.Header = http.Header{
"Referer": []string{"https://www.123pan.com/"},
}
return &link, nil return &link, nil
} else { } else {
return nil, fmt.Errorf("can't convert obj") 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 == "" { if resp.Data.AccessKeyId == "" || resp.Data.SecretAccessKey == "" || resp.Data.SessionToken == "" {
err = d.newUpload(ctx, &resp, stream, uploadFile, up) err = d.newUpload(ctx, &resp, stream, uploadFile, up)
return err
} else { } else {
cfg := &aws.Config{ cfg := &aws.Config{
Credentials: credentials.NewStaticCredentials(resp.Data.AccessKeyId, resp.Data.SecretAccessKey, resp.Data.SessionToken), Credentials: credentials.NewStaticCredentials(resp.Data.AccessKeyId, resp.Data.SecretAccessKey, resp.Data.SessionToken),

View File

@ -34,14 +34,17 @@ func (d *Pan123) getS3PreSignedUrls(ctx context.Context, upReq *UploadResp, star
return &s3PreSignedUrls, nil 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{ data := base.Json{
"StorageNode": upReq.Data.StorageNode,
"bucket": upReq.Data.Bucket, "bucket": upReq.Data.Bucket,
"fileId": upReq.Data.FileId,
"fileSize": file.GetSize(),
"isMultipart": isMultipart,
"key": upReq.Data.Key, "key": upReq.Data.Key,
"uploadId": upReq.Data.UploadId, "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) req.SetBody(data).SetContext(ctx)
}, nil) }, nil)
return err return err
@ -83,7 +86,7 @@ func (d *Pan123) newUpload(ctx context.Context, upReq *UploadResp, file model.Fi
} }
} }
// complete s3 upload // 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 { func (d *Pan123) uploadS3Chunk(ctx context.Context, upReq *UploadResp, s3PreSignedUrls *S3PreSignedURLs, cur, end int, reader io.Reader, curSize int64, retry bool) error {

View File

@ -15,19 +15,23 @@ import (
// do others that not defined in Driver interface // do others that not defined in Driver interface
const ( const (
API = "https://www.123pan.com/b/api" AApi = "https://www.123pan.com/a/api"
SignIn = API + "/user/sign_in" BApi = "https://www.123pan.com/b/api"
UserInfo = API + "/user/info" MainApi = AApi
FileList = API + "/file/list/new" SignIn = MainApi + "/user/sign_in"
DownloadInfo = "https://www.123pan.com/a/api/file/download_info" UserInfo = MainApi + "/user/info"
Mkdir = API + "/file/upload_request" FileList = MainApi + "/file/list/new"
Move = API + "/file/mod_pid" DownloadInfo = MainApi + "/file/download_info"
Rename = API + "/file/rename" Mkdir = MainApi + "/file/upload_request"
Trash = API + "/file/trash" Move = MainApi + "/file/mod_pid"
UploadRequest = API + "/file/upload_request" Rename = MainApi + "/file/rename"
UploadComplete = API + "/file/upload_complete" Trash = MainApi + "/file/trash"
S3PreSignedUrls = API + "/file/s3_repare_upload_parts_batch" UploadRequest = MainApi + "/file/upload_request"
S3Complete = API + "/file/s3_complete_multipart_upload" 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 { func (d *Pan123) login() error {
@ -42,6 +46,7 @@ func (d *Pan123) login() error {
body = base.Json{ body = base.Json{
"passport": d.Username, "passport": d.Username,
"password": d.Password, "password": d.Password,
"remember": true,
} }
} }
res, err := base.RestyClient.R(). 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 := base.RestyClient.R()
req.SetHeaders(map[string]string{ req.SetHeaders(map[string]string{
"origin": "https://www.123pan.com", "origin": "https://www.123pan.com",
"referer": "https://www.123pan.com/",
"authorization": "Bearer " + d.AccessToken, "authorization": "Bearer " + d.AccessToken,
"platform": "web", "platform": "web",
"app-version": "1.2", "app-version": "1.2",