-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtask_types.go
143 lines (121 loc) · 3.47 KB
/
task_types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package captcha
import (
"errors"
"time"
)
// A method that creates job with regular image captcha in base64 and gives you the answer
func (c *CaptchaServiceClient) RegularCaptcha(base64Image string, timeout time.Duration) (string, error){
// Preparation form data
data := map[string]interface{}{
"clientKey": c.ApiKey,
"task": map[string]interface{}{
"type": "ImageToTextTask",
"body": base64Image,
},
}
// Create task to solve
jobID, err := c.CreatTask(data)
if err != nil{
return "", err
}
// Check the status of job every 5 seconds
ping := time.NewTicker(5 * time.Second)
timeoutBreak := time.NewTimer(timeout * time.Second)
for {
select{
case <-ping.C:
answer, ready, err := c.CheckResult(jobID)
if err != nil{
return "", err
}
if ready{
return answer.TextSolution, nil
}
case <-timeoutBreak.C:
return "", errors.New("Waiting for captcha result timeout")
}
}
// If the job takes too long
return "", errors.New("Waiting for captcha result timeout")
}
// A method that creates job with Google reCaptcha and gives you the answer
func (c *CaptchaServiceClient) ReCaptchaV2(website, siteKey, sKey string, isInvisible bool, timeout time.Duration) (string, error){
// Preparation form data
data := map[string]interface{}{
"clientKey": c.ApiKey,
"task": map[string]interface{}{
"type": "NoCaptchaTaskProxyless",
"websiteURL": website,
"websiteKey": siteKey,
},
}
// sKey is not required
if sKey != ""{ data["task"].(map[string]interface{})["recaptchaDataSValue"] = sKey }
// isInvisible is not required
if isInvisible{ data["task"].(map[string]interface{})["isInvisible"] = true }
// Create task to resolve
jobID, err := c.CreatTask(data)
if err != nil{
return "", err
}
// Check the status of job every 5 seconds
ping := time.NewTicker(5 * time.Second)
timeoutBreak := time.NewTimer(timeout * time.Second)
for {
select {
case <-ping.C:
answer, ready, err := c.CheckResult(jobID)
if err != nil{
return "", err
}
if ready{
return answer.RecaptchaV2Solution, nil
}
case <-timeoutBreak.C:
return "", errors.New("Waiting for captcha result timeout")
}
}
// If the job takes too long
return "", errors.New("Waiting for captcha result timeout")
}
// A method that creates job with Google reCaptcha and gives you the answer
func (c *CaptchaServiceClient) ReCaptchaV2Enterprise(website, siteKey, sKey string, timeout time.Duration) (string, error){
// Preparation form data
data := map[string]interface{}{
"clientKey": c.ApiKey,
"task": map[string]interface{}{
"type": "RecaptchaV2EnterpriseTaskProxyless",
"websiteURL": website,
"websiteKey": siteKey,
"enterprisePayload": map[string]interface{}{
"s": sKey,
},
},
}
// sKey is not required
if sKey != ""{ data["task"].(map[string]interface{})["enterprisePayload"].(map[string]interface{})["s"] = sKey }
// Create task to resolve
jobID, err := c.CreatTask(data)
if err != nil{
return "", err
}
// Check the status of job every 5 seconds
ping := time.NewTicker(5 * time.Second)
timeoutBreak := time.NewTimer(timeout * time.Second)
for {
select {
case <-ping.C:
answer, ready, err := c.CheckResult(jobID)
if err != nil{
return "", err
}
if ready{
return answer.RecaptchaV2Solution, nil
}
case <-timeoutBreak.C:
return "", errors.New("Waiting for captcha result timeout")
}
}
// If the job takes too long
return "", errors.New("Waiting for captcha result timeout")
}