Repository: AlistGo/alist (language: go)

Issue:
迅雷云盘报错
### Please make sure of the following things

- [X] I have read the [documentation](https://alist-doc.nn.ci).
- [X] I'm sure there are no duplicate issues or discussions.
- [X] I'm sure it's due to `alist` and not something else(such as `Dependencies` or `Operational`).

### Alist Version / Alist 版本

v2.5.0

### Describe the bug / 问题描述

提示: ErrorCode: 0 ,Error: invalid_argument ,ErrorDescription: x-client-id required
我看到迅雷云盘有更新,是不是有的方式有问题,还是设置除账号密码以外的东西

### Reproduction / 复现链接

https://github.com/Xhofe/alist/commit/11830bb51c0cd4b9fb36aa7283bc0120b2ed794c

### Logs / 日志

_No response_


Discussion / hints:
Thanks for opening your first issue here! Be sure to follow the issue template!

重新创建一下账号，数据库结构调整了
@foxxorcat 我重新添加,保存的时候还是会报ErrorCode: 0 ,Error: invalid_argument ,ErrorDescription: x-client-id required
请求逻辑中没把 client-id传好，暂时用旧版本把
@foxxorcat 大佬你怎么获取client secret这个值的,我当时为了获取玩客云的这个值,用了frida这个东西,折腾好久才获取,玩客云加固了,我反编译不出来,但是因为曾经反编译过迅雷水晶的代码,知道大概逻辑就hook了一个方法获取到了client secret(好久之前折腾的了,应该就是这个东西,我看长度像,迅雷的东西都是这个逻辑)
@viqbgrg 直接用frida抓登录的包，传的参数里面就有

Fix patch:
diff --git a/bootstrap/setting.go b/bootstrap/setting.go
index 6591a774d3a..1843325f0df 100644
--- a/bootstrap/setting.go
+++ b/bootstrap/setting.go
@@ -252,7 +252,7 @@ func InitSettings() {
 		},
 		{
 			Key:         "ocr api",
-			Value:       "https://api.xhofe.top/ocr/file/json",
+			Value:       "https://api.nn.ci/ocr/file/json",
 			Description: "Used to identify verification codes",
 			Type:        "string",
 			Access:      model.PRIVATE,
diff --git a/drivers/189/189.go b/drivers/189/189.go
index 1d8eeae47c8..251987f3a44 100644
--- a/drivers/189/189.go
+++ b/drivers/189/189.go
@@ -110,8 +110,10 @@ func (driver Cloud189) Login(account *model.Account) error {
 	b := ""
 	lt := ""
 	ltText := regexp.MustCompile(`lt = "(.+?)"`)
+	var res *resty.Response
+	var err error
 	for i := 0; i < 3; i++ {
-		res, err := client.R().Get(url)
+		res, err = client.R().Get(url)
 		if err != nil {
 			return err
 		}
@@ -129,7 +131,7 @@ func (driver Cloud189) Login(account *model.Account) error {
 		}
 	}
 	if lt == "" {
-		return errors.New("get page: " + b)
+		return fmt.Errorf("get page: %s \nstatus: %d \nrequest url: %s", b, res.StatusCode(), res.RawResponse.Request.URL.String())
 	}
 	captchaToken := regexp.MustCompile(`captchaToken' value='(.+?)'`).FindStringSubmatch(b)[1]
 	returnUrl := regexp.MustCompile(`returnUrl = '(.+?)'`).FindStringSubmatch(b)[1]
diff --git a/drivers/baiduphoto/driver.go b/drivers/baiduphoto/driver.go
index a502eefeafb..99010ac1d95 100644
--- a/drivers/baiduphoto/driver.go
+++ b/drivers/baiduphoto/driver.go
@@ -9,7 +9,6 @@ import (
 	"math"
 	"net/http"
 	"os"
-	"path/filepath"
 
 	"github.com/Xhofe/alist/conf"
 	"github.com/Xhofe/alist/drivers/base"
@@ -81,7 +80,7 @@ func (driver Baidu) File(path string, account *model.Account) (*model.File, erro
 		}, nil
 	}
 
-	dir, name := filepath.Split(path)
+	dir, name := utils.Split(path)
 	files, err := driver.Files(dir, account)
 	if err != nil {
 		return nil, err
@@ -123,7 +122,7 @@ func (driver Baidu) Files(path string, account *model.Account) ([]model.File, er
 				Id:        joinID(file.Fsid, file.Uk, file.Tid),
 				Name:      file.Name(),
 				Size:      file.Size,
-				Type:      utils.GetFileType(filepath.Ext(file.Path)),
+				Type:      utils.GetFileType(utils.Ext(file.Path)),
 				Driver:    driver.Config().Name,
 				UpdatedAt: getTime(file.Mtime),
 				Thumbnail: thumbnail,
@@ -165,7 +164,7 @@ func (driver Baidu) Link(args base.Args, account *model.Account) (*base.Link, er
 		return nil, base.ErrNotSupport
 	}
 
-	album, err := driver.File(filepath.Dir(utils.ParsePath(args.Path)), account)
+	album, err := driver.File(utils.Dir(utils.ParsePath(args.Path)), account)
 	if err != nil {
 		return nil, err
 	}
@@ -218,13 +217,13 @@ func (driver Baidu) Rename(src string, dst string, account *model.Account) error
 	}
 
 	if IsAlbum(srcFile) {
-		return driver.SetAlbumName(srcFile.Id, filepath.Base(dst), account)
+		return driver.SetAlbumName(srcFile.Id, utils.Base(dst), account)
 	}
 	return base.ErrNotSupport
 }
 
 func (driver Baidu) MakeDir(path string, account *model.Account) error {
-	dir, name := filepath.Split(path)
+	dir, name := utils.Split(path)
 	parentFile, err := driver.File(dir, account)
 	if err != nil {
 		return err
@@ -244,7 +243,7 @@ func (driver Baidu) Move(src string, dst string, account *model.Account) error {
 
 	if IsAlbumFile(srcFile) {
 		// 移动相册文件
-		dstAlbum, err := driver.File(filepath.Dir(dst), account)
+		dstAlbum, err := driver.File(utils.Dir(dst), account)
 		if err != nil {
 			return err
 		}
@@ -252,7 +251,7 @@ func (driver Baidu) Move(src string, dst string, account *model.Account) error {
 			return base.ErrNotSupport
 		}
 
-		srcAlbum, err := driver.File(filepath.Dir(src), account)
+		srcAlbum, err := driver.File(utils.Dir(src), account)
 		if err != nil {
 			return err
 		}
@@ -282,7 +281,7 @@ func (driver Baidu) Copy(src string, dst string, account *model.Account) error {
 
 	if IsAlbumFile(srcFile) {
 		// 复制相册文件
-		dstAlbum, err := driver.File(filepath.Dir(dst), account)
+		dstAlbum, err := driver.File(utils.Dir(dst), account)
 		if err != nil {
 			return err
 		}
@@ -290,7 +289,7 @@ func (driver Baidu) Copy(src string, dst string, account *model.Account) error {
 			return base.ErrNotSupport
 		}
 
-		srcAlbum, err := driver.File(filepath.Dir(src), account)
+		srcAlbum, err := driver.File(utils.Dir(src), account)
 		if err != nil {
 			return err
 		}
@@ -322,7 +321,7 @@ func (driver Baidu) Delete(path string, account *model.Account) error {
 	// 生成相册文件
 	if IsAlbumFile(file) {
 		// 删除相册文件
-		album, err := driver.File(filepath.Dir(path), account)
+		album, err := driver.File(utils.Dir(path), account)
 		if err != nil {
 			return err
 		}
diff --git a/drivers/baiduphoto/types.go b/drivers/baiduphoto/types.go
index 9bc954b0376..734b5a538b6 100644
--- a/drivers/baiduphoto/types.go
+++ b/drivers/baiduphoto/types.go
@@ -2,7 +2,8 @@ package baiduphoto
 
 import (
 	"fmt"
-	"path/filepath"
+
+	"github.com/Xhofe/alist/utils"
 )
 
 type TokenErrResp struct {
@@ -45,7 +46,7 @@ type (
 )
 
 func (f File) Name() string {
-	return filepath.Base(f.Path)
+	return utils.Base(f.Path)
 }
 
 /*相册部分*/
diff --git a/drivers/xunlei/xunlei.go b/drivers/xunlei/xunlei.go
index d98bd4c0528..13acd20230d 100644
--- a/drivers/xunlei/xunlei.go
+++ b/drivers/xunlei/xunlei.go
@@ -211,7 +211,7 @@ func (c *Client) Request(method string, url string, callback func(*resty.Request
 			"X-Captcha-Token": c.captchaToken,
 			"User-Agent":      c.userAgent,
 			"client_id":       c.clientID,
-		})
+		}).SetQueryParam("client_id", c.clientID)
 	if callback != nil {
 		callback(req)
 	}


Test patch: