Skip to content

Commit 97e6e1b

Browse files
bincooobincooo
bincooo
authored and
bincooo
committed
style(deepseek): 403尝试过盾
1 parent 91300a5 commit 97e6e1b

File tree

1 file changed

+67
-34
lines changed

1 file changed

+67
-34
lines changed

relay/llm/deepseek/fetch.go

+67-34
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package deepseek
33
import (
44
"bytes"
55
"chatgpt-adapter/core/common"
6-
"chatgpt-adapter/core/common/inited"
76
"chatgpt-adapter/core/gin/model"
87
"chatgpt-adapter/core/gin/response"
98
"chatgpt-adapter/core/logger"
@@ -17,11 +16,17 @@ import (
1716
"github.com/iocgo/sdk/env"
1817
"net/http"
1918
"strings"
19+
"sync"
2020
"time"
2121
)
2222

2323
var (
24-
userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1.1 Safari/605.1.15"
24+
userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1.1 Safari/605.1.15"
25+
lang string
26+
clearance string
27+
28+
mu sync.Mutex
29+
2530
calcServer = "https://wik5ez2o-helper.hf.space"
2631
)
2732

@@ -37,34 +42,6 @@ var (
3742
// wasmInstance = inst
3843
//}
3944

40-
var (
41-
// 尝试过盾
42-
cookies = ""
43-
)
44-
45-
func init() {
46-
inited.AddInitialized(func(env *env.Environment) {
47-
_userAgent := env.GetString("deepseek.userAgent")
48-
if _userAgent != "" {
49-
userAgent = _userAgent
50-
}
51-
52-
cookies = env.GetString("deepseek.cookie")
53-
if cookies != "" {
54-
split := strings.Split(cookies, "; ")
55-
result := make([]string, 0)
56-
for _, cookie := range split {
57-
if strings.HasPrefix(cookie, "cf_clearance=") ||
58-
strings.HasPrefix(cookie, "__cf_bm=") ||
59-
strings.HasPrefix(cookie, "_cfuvid=") {
60-
result = append(result, cookie)
61-
}
62-
}
63-
cookies = strings.Join(result, "; ")
64-
}
65-
})
66-
}
67-
6845
type deepseekRequest struct {
6946
ChatSessionId string `json:"chat_session_id"`
7047
ParentMessageId *int `json:"parent_message_id"`
@@ -91,7 +68,8 @@ label:
9168
Header("x-client-locale", "zh_CN").
9269
Header("x-client-platform", "web").
9370
Header("x-client-version", "1.0.0-always").
94-
Header(elseOf(cookies != "", "cookie"), cookies).
71+
Header(elseOf(clearance != "", "cookie"), clearance).
72+
Header(elseOf(lang != "", "accept-language"), lang).
9573
Body(map[string]interface{}{
9674
"target_path": "/api/v0/chat/completion",
9775
}).
@@ -156,7 +134,8 @@ label:
156134
Header("x-client-platform", "web").
157135
Header("x-client-version", "1.0.0-always").
158136
Header("x-ds-pow-response", base64.RawStdEncoding.EncodeToString(buf)).
159-
Header(elseOf(cookies != "", "cookie"), cookies).
137+
Header(elseOf(clearance != "", "cookie"), clearance).
138+
Header(elseOf(lang != "", "accept-language"), lang).
160139
Body(request).
161140
DoC(emit.Status(http.StatusOK), emit.IsSTREAM)
162141
if err != nil {
@@ -185,7 +164,8 @@ func deleteSession(ctx *gin.Context, env *env.Environment, sessionId string) {
185164
Header("x-client-locale", "zh_CN").
186165
Header("x-client-platform", "web").
187166
Header("x-client-version", "1.0.0-always").
188-
Header(elseOf(cookies != "", "cookie"), cookies).
167+
Header(elseOf(clearance != "", "cookie"), clearance).
168+
Header(elseOf(lang != "", "accept-language"), lang).
189169
Body(map[string]interface{}{
190170
"chat_session_id": sessionId,
191171
}).DoC(emit.Status(http.StatusOK), emit.IsJSON)
@@ -331,11 +311,16 @@ func convertRequest(ctx *gin.Context, env *env.Environment, completion model.Com
331311
Header("x-client-locale", "zh_CN").
332312
Header("x-client-platform", "web").
333313
Header("x-client-version", "1.0.0-always").
334-
Header(elseOf(cookies != "", "cookie"), cookies).
314+
Header(elseOf(clearance != "", "cookie"), clearance).
315+
Header(elseOf(lang != "", "accept-language"), lang).
335316
Body(map[string]interface{}{
336317
"character_id": nil,
337318
}).DoC(emit.Status(http.StatusOK), emit.IsJSON)
338319
if err != nil {
320+
var busErr emit.Error
321+
if errors.As(err, &busErr) && busErr.Code == 403 {
322+
_ = hookCloudflare(env)
323+
}
339324
return
340325
}
341326

@@ -386,6 +371,54 @@ label:
386371
return
387372
}
388373

374+
func hookCloudflare(env *env.Environment) error {
375+
if clearance != "" {
376+
return nil
377+
}
378+
379+
baseUrl := env.GetString("browser-less.reversal")
380+
if !env.GetBool("browser-less.enabled") && baseUrl == "" {
381+
return errors.New("trying cloudflare failed, please setting `browser-less.enabled` or `browser-less.reversal`")
382+
}
383+
384+
logger.Info("trying cloudflare ...")
385+
386+
mu.Lock()
387+
defer mu.Unlock()
388+
if clearance != "" {
389+
return nil
390+
}
391+
392+
if baseUrl == "" {
393+
baseUrl = "http://127.0.0.1:" + env.GetString("browser-less.port")
394+
}
395+
396+
r, err := emit.ClientBuilder(common.HTTPClient).
397+
GET(baseUrl+"/v0/clearance").
398+
Header("x-website", "https://chat.deepseek.com").
399+
DoC(emit.Status(http.StatusOK), emit.IsJSON)
400+
if err != nil {
401+
logger.Error(err)
402+
if emit.IsJSON(r) == nil {
403+
logger.Error(emit.TextResponse(r))
404+
}
405+
return err
406+
}
407+
408+
defer r.Body.Close()
409+
obj, err := emit.ToMap(r)
410+
if err != nil {
411+
logger.Error(err)
412+
return err
413+
}
414+
415+
data := obj["data"].(map[string]interface{})
416+
clearance = data["cookie"].(string)
417+
userAgent = data["userAgent"].(string)
418+
lang = data["lang"].(string)
419+
return nil
420+
}
421+
389422
func elseOf[T any](condition bool, t T) (zero T) {
390423
if condition {
391424
return t

0 commit comments

Comments
 (0)