deathbycaptcha 5.0.5 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +49 -8
- data/lib/deathbycaptcha/client.rb +6 -2
- data/lib/deathbycaptcha/client/http.rb +6 -0
- data/lib/deathbycaptcha/models/captcha.rb +1 -0
- data/lib/deathbycaptcha/version.rb +1 -1
- data/spec/lib/image_captcha_spec.rb +24 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ade8e91dabaff38c45364e41cc0e90eb667dc3b
|
4
|
+
data.tar.gz: 2563cc60295125efac5e573fa478aa57b7f6ddc3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ef6a321ccd6c67cff5afed7048c1c8ec627b14baaa2e40c210183e371cc2c681a280c6fedfc78f927cb00b62fd93c8b8d67157bd955441fc61e2d48d2865554
|
7
|
+
data.tar.gz: bc31af5d0705e589468c08bae270ddaa85b03a9f9fa7bf7b991d70f08bb2d421d98719697bd7861d86552a48b82ca35c8a76d00e96e28e90dce28597231ee9e4
|
data/README.md
CHANGED
@@ -182,6 +182,55 @@ something like:
|
|
182
182
|
[1, 9]
|
183
183
|
```
|
184
184
|
|
185
|
+
## New Recaptcha by Token API
|
186
|
+
|
187
|
+
> It's currently available only with the :http client.
|
188
|
+
|
189
|
+
To solve captchas similar to
|
190
|
+
[reCAPTCHA v2](https://support.google.com/recaptcha/?hl=en#6262736), you can also use
|
191
|
+
**Token API**
|
192
|
+
|
193
|
+
Please, read the oficial documentation at
|
194
|
+
http://deathbycaptcha.com/user/api/newtokenrecaptcha
|
195
|
+
|
196
|
+
### Using the Token API
|
197
|
+
|
198
|
+
```ruby
|
199
|
+
# Read above all the instructions on how to solve a captcha.
|
200
|
+
captcha = client.decode!(type: 4, token_params: {
|
201
|
+
# optional proxy if needed and server verifies
|
202
|
+
#proxy: "http://127.0.0.1:3128",
|
203
|
+
#proxytype: "HTTP",
|
204
|
+
googlekey: "6Ld2sf4SAAAAAKSgzs0Q13IZhY02Pyo31S2jgOB5",
|
205
|
+
pageurl: "https://patrickhlauke.github.io/recaptcha/"
|
206
|
+
})
|
207
|
+
```
|
208
|
+
|
209
|
+
You should specify arguments with *type = 4* and an all token params required by DBC API
|
210
|
+
|
211
|
+
The response will be a text (token), which you can access with **text** or **token** method.
|
212
|
+
|
213
|
+
```ruby
|
214
|
+
# captcha.text
|
215
|
+
"03AOPBWq_RPO2vLzyk0h8gH0cA2X4v3tpYCPZR6Y4yxKy1s3Eo7CHZRQntxrd
|
216
|
+
saD2H0e6S3547xi1FlqJB4rob46J0-wfZMj6YpyVa0WGCfpWzBWcLn7tO_EYs
|
217
|
+
vEC_3kfLNINWa5LnKrnJTDXTOz-JuCKvEXx0EQqzb0OU4z2np4uyu79lc_Ndv
|
218
|
+
L0IRFc3Cslu6UFV04CIfqXJBWCE5MY0Ag918r14b43ZdpwHSaVVrUqzCQMCyb
|
219
|
+
cGq0yxLQf9eSexFiAWmcWLI5nVNA81meTXhQlyCn5bbbI2IMSEErDqceZjf1m
|
220
|
+
X3M67BhIb4"
|
221
|
+
|
222
|
+
# captcha.token
|
223
|
+
"03AOPBWq_RPO2vLzyk0h8gH0cA2X4v3tpYCPZR6Y4yxKy1s3Eo7CHZRQntxrd
|
224
|
+
saD2H0e6S3547xi1FlqJB4rob46J0-wfZMj6YpyVa0WGCfpWzBWcLn7tO_EYs
|
225
|
+
vEC_3kfLNINWa5LnKrnJTDXTOz-JuCKvEXx0EQqzb0OU4z2np4uyu79lc_Ndv
|
226
|
+
L0IRFc3Cslu6UFV04CIfqXJBWCE5MY0Ag918r14b43ZdpwHSaVVrUqzCQMCyb
|
227
|
+
cGq0yxLQf9eSexFiAWmcWLI5nVNA81meTXhQlyCn5bbbI2IMSEErDqceZjf1m
|
228
|
+
X3M67BhIb4"
|
229
|
+
```
|
230
|
+
|
231
|
+
> Those captchas sometimes took more than 60 seconds to solve
|
232
|
+
> So consider increasing the client's *timeout*
|
233
|
+
|
185
234
|
## Notes
|
186
235
|
|
187
236
|
#### Thread-safety
|
@@ -238,14 +287,6 @@ This gem has been tested on the following versions of Ruby:
|
|
238
287
|
* MRI 2.0.0
|
239
288
|
* MRI 1.9.3
|
240
289
|
|
241
|
-
# Maintainers
|
242
|
-
|
243
|
-
* [Débora Setton Fernandes](http://github.com/deborasetton)
|
244
|
-
* [Marcelo Mita](http://github.com/marcelomita)
|
245
|
-
* [Rafael Barbolo](http://github.com/barbolo)
|
246
|
-
* [Rafael Ivan Garcia](http://github.com/rafaelivan)
|
247
|
-
|
248
|
-
|
249
290
|
## Contributing
|
250
291
|
|
251
292
|
1. Fork it ( https://github.com/infosimples/deathbycaptcha/fork )
|
@@ -86,8 +86,12 @@ module DeathByCaptcha
|
|
86
86
|
def decode!(options = {})
|
87
87
|
started_at = Time.now
|
88
88
|
|
89
|
-
|
90
|
-
|
89
|
+
# don't load image data for Token API
|
90
|
+
raw64 = nil
|
91
|
+
unless options[:type] == 4
|
92
|
+
raw64 = load_captcha(options)
|
93
|
+
raise DeathByCaptcha::InvalidCaptcha if raw64.to_s.empty?
|
94
|
+
end
|
91
95
|
|
92
96
|
decoded_captcha = self.upload(options.merge(raw64: raw64))
|
93
97
|
|
@@ -61,6 +61,12 @@ module DeathByCaptcha
|
|
61
61
|
|
62
62
|
payload[:banner] = "base64:#{banner64}"
|
63
63
|
payload[:banner_text] = options[:banner_text].to_s
|
64
|
+
|
65
|
+
elsif options[:type].to_i == 4
|
66
|
+
payload = {
|
67
|
+
type: 4,
|
68
|
+
token_params: options[:token_params].to_json,
|
69
|
+
}
|
64
70
|
end
|
65
71
|
|
66
72
|
response = perform('captcha', :post_multipart, payload)
|
@@ -6,6 +6,12 @@ path2 = './captchas/2.jpg' # path of the captcha (Coordinates API)
|
|
6
6
|
path3_grid = './captchas/3-grid.jpg' # path of the grid (Image Group API)
|
7
7
|
path3_banner = './captchas/3-banner.jpg' # path of the grid (Image Group API)
|
8
8
|
banner_text3 = 'Click all images with bananas'
|
9
|
+
token_params = {
|
10
|
+
#proxy: "http://127.0.0.1:3128",
|
11
|
+
#proxytype: "HTTP",
|
12
|
+
googlekey: "6Ld2sf4SAAAAAKSgzs0Q13IZhY02Pyo31S2jgOB5",
|
13
|
+
pageurl: "https://patrickhlauke.github.io/recaptcha/"
|
14
|
+
}
|
9
15
|
|
10
16
|
describe 'Solving an image based captcha' do
|
11
17
|
before(:all) { @client = DeathByCaptcha.new(username, password, :http) }
|
@@ -53,4 +59,22 @@ describe 'Solving an image based captcha' do
|
|
53
59
|
it { expect(@captcha.id).to eq(@captcha.captcha) }
|
54
60
|
end
|
55
61
|
end
|
62
|
+
|
63
|
+
context 'Token API' do
|
64
|
+
describe '#decode!' do
|
65
|
+
before(:all) do
|
66
|
+
@captcha = @client.decode!(
|
67
|
+
type: 4,
|
68
|
+
token_params: token_params,
|
69
|
+
)
|
70
|
+
end
|
71
|
+
it { expect(@captcha).to be_a(DeathByCaptcha::Captcha) }
|
72
|
+
it { expect(@captcha.text).to eq(@captcha.token) }
|
73
|
+
it { expect(@captcha.token).to match(/\A"?\S+"?\Z/) }
|
74
|
+
it { expect(@captcha.token.size).to be > 30 }
|
75
|
+
it { expect(@captcha.is_correct).to be true }
|
76
|
+
it { expect(@captcha.id).to be > 0 }
|
77
|
+
it { expect(@captcha.id).to eq(@captcha.captcha) }
|
78
|
+
end
|
79
|
+
end
|
56
80
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deathbycaptcha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0
|
4
|
+
version: 5.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafael Barbolo, Rafael Ivan Garcia
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -107,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
107
|
version: '0'
|
108
108
|
requirements: []
|
109
109
|
rubyforge_project:
|
110
|
-
rubygems_version: 2.
|
110
|
+
rubygems_version: 2.5.1
|
111
111
|
signing_key:
|
112
112
|
specification_version: 4
|
113
113
|
summary: Ruby API for DeathByCaptcha (Captcha Solver as a Service)
|