@@ -3,7 +3,6 @@ package deepseek
3
3
import (
4
4
"bytes"
5
5
"chatgpt-adapter/core/common"
6
- "chatgpt-adapter/core/common/inited"
7
6
"chatgpt-adapter/core/gin/model"
8
7
"chatgpt-adapter/core/gin/response"
9
8
"chatgpt-adapter/core/logger"
@@ -17,11 +16,17 @@ import (
17
16
"github.com/iocgo/sdk/env"
18
17
"net/http"
19
18
"strings"
19
+ "sync"
20
20
"time"
21
21
)
22
22
23
23
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
+
25
30
calcServer = "https://wik5ez2o-helper.hf.space"
26
31
)
27
32
37
42
// wasmInstance = inst
38
43
//}
39
44
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
-
68
45
type deepseekRequest struct {
69
46
ChatSessionId string `json:"chat_session_id"`
70
47
ParentMessageId * int `json:"parent_message_id"`
91
68
Header ("x-client-locale" , "zh_CN" ).
92
69
Header ("x-client-platform" , "web" ).
93
70
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 ).
95
73
Body (map [string ]interface {}{
96
74
"target_path" : "/api/v0/chat/completion" ,
97
75
}).
@@ -156,7 +134,8 @@ label:
156
134
Header ("x-client-platform" , "web" ).
157
135
Header ("x-client-version" , "1.0.0-always" ).
158
136
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 ).
160
139
Body (request ).
161
140
DoC (emit .Status (http .StatusOK ), emit .IsSTREAM )
162
141
if err != nil {
@@ -185,7 +164,8 @@ func deleteSession(ctx *gin.Context, env *env.Environment, sessionId string) {
185
164
Header ("x-client-locale" , "zh_CN" ).
186
165
Header ("x-client-platform" , "web" ).
187
166
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 ).
189
169
Body (map [string ]interface {}{
190
170
"chat_session_id" : sessionId ,
191
171
}).DoC (emit .Status (http .StatusOK ), emit .IsJSON )
@@ -331,11 +311,16 @@ func convertRequest(ctx *gin.Context, env *env.Environment, completion model.Com
331
311
Header ("x-client-locale" , "zh_CN" ).
332
312
Header ("x-client-platform" , "web" ).
333
313
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 ).
335
316
Body (map [string ]interface {}{
336
317
"character_id" : nil ,
337
318
}).DoC (emit .Status (http .StatusOK ), emit .IsJSON )
338
319
if err != nil {
320
+ var busErr emit.Error
321
+ if errors .As (err , & busErr ) && busErr .Code == 403 {
322
+ _ = hookCloudflare (env )
323
+ }
339
324
return
340
325
}
341
326
@@ -386,6 +371,54 @@ label:
386
371
return
387
372
}
388
373
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
+
389
422
func elseOf [T any ](condition bool , t T ) (zero T ) {
390
423
if condition {
391
424
return t
0 commit comments