@@ -38,6 +38,8 @@ func antiCaptchaMethods(solver *Solver, preferredDomain string) *solveMethods {
38
38
payload ["softId" ] = 1080
39
39
} else if strings .Contains (d , "capmonster.cloud" ) {
40
40
payload ["softId" ] = 59
41
+ } else if strings .Contains (d , "capsolver.com" ) {
42
+ payload ["appId" ] = "B7E57F27-0AD3-434D-A5B7-CF9EE7D093EF"
41
43
}
42
44
43
45
body , err := postJSON (d + "/createTask" , payload )
@@ -93,16 +95,20 @@ func antiCaptchaMethods(solver *Solver, preferredDomain string) *solveMethods {
93
95
case "processing" :
94
96
continue
95
97
case "ready" :
96
- solution , hasSolution := body ["solution" ]
98
+ solution , hasSolution := body ["solution" ].( map [ string ] interface {})
97
99
if ! hasSolution {
98
100
return nil , errors .New ("no solution" )
99
101
}
100
102
101
103
// response can either be gRecaptchaResponse or token
102
- response := solution .( map [ string ] interface {}) ["gRecaptchaResponse" ]
104
+ response := solution ["gRecaptchaResponse" ]
103
105
104
106
if response == nil {
105
- response = solution .(map [string ]interface {})["token" ]
107
+ response = solution ["token" ]
108
+ }
109
+
110
+ if response == nil {
111
+ response = solution ["x-kpsdk-ct" ]
106
112
}
107
113
108
114
if response == nil {
@@ -127,10 +133,11 @@ func antiCaptchaMethods(solver *Solver, preferredDomain string) *solveMethods {
127
133
}
128
134
129
135
return & Solution {
130
- TaskId : taskId ,
131
- Text : response .(string ),
132
- IP : ip ,
133
- Cost : cost ,
136
+ TaskId : taskId ,
137
+ Text : response .(string ),
138
+ RawSolution : solution ,
139
+ IP : ip ,
140
+ Cost : cost ,
134
141
}, nil
135
142
default :
136
143
return nil , errors .New ("unknown status" )
@@ -183,7 +190,7 @@ func antiCaptchaMethods(solver *Solver, preferredDomain string) *solveMethods {
183
190
data ["proxyType" ] = t
184
191
}
185
192
186
- return & solveMethods {
193
+ methods := & solveMethods {
187
194
GetBalance : func () (float64 , error ) {
188
195
d := domain ()
189
196
@@ -317,4 +324,55 @@ func antiCaptchaMethods(solver *Solver, preferredDomain string) *solveMethods {
317
324
return createResponse (taskData )
318
325
},
319
326
}
327
+
328
+ // kasada method
329
+ if solver .service == CapSolver {
330
+ methods .Kasada = func (o KasadaOptions ) (* KasadaSolution , error ) {
331
+ taskData := map [string ]interface {}{
332
+ "type" : "AntiKasadaTask" ,
333
+ "pageURL" : o .PageURL ,
334
+ "cd" : o .DetailedCD ,
335
+ "onlyCD" : o .OnlyCD ,
336
+ "version" : o .Version ,
337
+ "userAgent" : o .UserAgent ,
338
+ }
339
+
340
+ if o .Proxy != nil {
341
+ taskData ["proxy" ] = o .Proxy .String ()
342
+ }
343
+
344
+ sol , err := createResponse (taskData )
345
+ if err != nil {
346
+ return nil , err
347
+ }
348
+
349
+ kpsdkCD := ""
350
+ kpsdkCT := ""
351
+ userAgent := ""
352
+
353
+ raw := sol .RawSolution ["x-kpsdk-cd" ]
354
+ if raw != nil {
355
+ kpsdkCD = raw .(string )
356
+ }
357
+
358
+ raw = sol .RawSolution ["x-kpsdk-ct" ]
359
+ if raw != nil {
360
+ kpsdkCT = raw .(string )
361
+ }
362
+
363
+ raw = sol .RawSolution ["user-agent" ]
364
+ if raw != nil {
365
+ userAgent = raw .(string )
366
+ }
367
+
368
+ return & KasadaSolution {
369
+ Solution : sol ,
370
+ KpsdkCD : kpsdkCD ,
371
+ KpsdkCT : kpsdkCT ,
372
+ UserAgent : userAgent ,
373
+ }, nil
374
+ }
375
+ }
376
+
377
+ return methods
320
378
}
0 commit comments