two_captcha 1.3.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Changelog.md +9 -0
- data/README.md +72 -10
- data/lib/two_captcha/client.rb +101 -18
- data/lib/two_captcha/errors.rb +39 -5
- data/lib/two_captcha/version.rb +1 -1
- data/spec/lib/client_spec.rb +18 -0
- data/two_captcha.gemspec +6 -2
- metadata +9 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 85dec926f62d43f6629fea1232276b55950cac27c107e64d064f6374f571c6b6
|
4
|
+
data.tar.gz: 9e962be8d8d1dd76f6cfe7644003a042b3bcccf216aa5d820fd057c95d930c22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11dc25d38866f051f13963f460c9b8d5b813d0960b4f1ce8fa3b0c589555d368021cae3994cd1e9d0e6f730940a6921fa91173a70e48a29ec25b7a3903ac814e
|
7
|
+
data.tar.gz: 762fd992e1b9fa35cfc91baf729d280d123298a46f92b75a6dc03e3b42294184d3a4c84cfc449b5d6d44615f54434c5a1d9c0b565ce1ab7d310cf907996b0d50
|
data/Changelog.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# TwoCaptcha Changes
|
2
|
+
|
3
|
+
### 1.4.0
|
4
|
+
|
5
|
+
* **breaking changes:**
|
6
|
+
* The method "decode_recaptcha_v2" now always return a TwoCaptcha::Captcha
|
7
|
+
object. It was returning a string when successful.
|
8
|
+
* enhancements:
|
9
|
+
* Add tests to solve RecaptchaV2 with the preferred method.
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Developed by [Infosimples](https://infosimples.com)
|
1
|
+
Developed by [Infosimples](https://infosimples.com).
|
2
2
|
|
3
3
|
# TwoCaptcha
|
4
4
|
|
@@ -66,10 +66,13 @@ Or install it yourself as:
|
|
66
66
|
captcha = client.captcha('130920620') # with 130920620 as the captcha id
|
67
67
|
```
|
68
68
|
|
69
|
-
4. **Report incorrectly
|
69
|
+
4. **Report incorrectly (for refund) or correctly (useful for reCAPTCHA v3) solved captcha**
|
70
70
|
|
71
71
|
```ruby
|
72
|
-
client.report!('130920620') # with 130920620 as the captcha id
|
72
|
+
client.report!('130920620', 'reportbad') # with 130920620 as the captcha id
|
73
|
+
# return true if successfully reported
|
74
|
+
|
75
|
+
client.report!('256892751', 'reportgood') # with 256892751 as the captcha id
|
73
76
|
# return true if successfully reported
|
74
77
|
```
|
75
78
|
|
@@ -96,17 +99,18 @@ Or install it yourself as:
|
|
96
99
|
# return an XML string with the current service load.
|
97
100
|
```
|
98
101
|
|
99
|
-
##
|
102
|
+
## reCAPTCHA v2 (e.g. "No CAPTCHA reCAPTCHA")
|
100
103
|
|
101
104
|
There are two ways of solving captchas similar to
|
102
105
|
[reCAPTCHA v2](https://support.google.com/recaptcha/?hl=en#6262736).
|
103
106
|
|
104
107
|
### (Prefered) Sending the `googlekey` and `pageurl` parameters
|
105
108
|
|
106
|
-
This method requires no browser emulation. You can send two parameters that
|
109
|
+
This method requires no browser emulation. You can send two parameters that
|
110
|
+
identify the website in which the captcha is found.
|
107
111
|
|
108
|
-
Please read the oficial documentation
|
109
|
-
more information.
|
112
|
+
Please read the [oficial documentation](https://2captcha.com/newapi-recaptcha-en)
|
113
|
+
for more information.
|
110
114
|
|
111
115
|
```ruby
|
112
116
|
options = {
|
@@ -114,13 +118,16 @@ more information.
|
|
114
118
|
pageurl: 'http://example.com/example=1'
|
115
119
|
}
|
116
120
|
|
117
|
-
client.decode_recaptcha_v2(options)
|
121
|
+
captcha = client.decode_recaptcha_v2(options)
|
122
|
+
captcha.text # Solution of the captcha
|
123
|
+
captcha.id # Numeric ID of the captcha solved by TwoCaptcha
|
118
124
|
```
|
119
125
|
|
120
|
-
The
|
126
|
+
The solution (`captcha.text`) will be a code that validates the form, like the
|
127
|
+
following:
|
121
128
|
|
122
129
|
```ruby
|
123
|
-
"
|
130
|
+
"1JJHJ_VuuHAqJKxcaasbTsqw-L1Sm4gD57PTeaEr9-MaETG1vfu2H5zlcwkjsRoZoHxx6V9yUDw8Ig-hYD8kakmSnnjNQd50w_Y_tI3aDLp-s_7ZmhH6pcaoWWsid5hdtMXyvrP9DscDuCLBf7etLle8caPWSaYCpAq9DOTtj5NpSg6-OeCJdGdkjsakFUMeGeqmje87wSajcjmdjl_w4XZBY2zy8fUH6XoAGZ6AeCTulIljBQDObQynKDd-rutPvKNxZasDk-LbhTfw508g1lu9io6jnvm3kbAdnkfZ0x0PkGiUMHU7hnuoW6bXo2Yn_Zt5tDWL7N7wFtY6B0k7cTy73f8er508zReOuoyz2NqL8smDCmcJu05ajkPGt20qzpURMwHaw"
|
124
131
|
```
|
125
132
|
|
126
133
|
### Sending the challenge image
|
@@ -161,6 +168,61 @@ The response will be a simple text:
|
|
161
168
|
'61267'
|
162
169
|
```
|
163
170
|
|
171
|
+
## reCAPTCHA v3
|
172
|
+
|
173
|
+
This method requires no browser emulation. You can send four parameters that
|
174
|
+
identify the website in which the CAPTCHA is found and the minimum score
|
175
|
+
(0.3, 0.5 or 0.7) you desire.
|
176
|
+
|
177
|
+
**It's strongly recommended to use a minimum score of 0.3 as higher scores are extremely rare.**
|
178
|
+
|
179
|
+
Please read the [oficial documentation](https://2captcha.com/2captcha-api#solving_recaptchav3)
|
180
|
+
for more information.
|
181
|
+
|
182
|
+
```ruby
|
183
|
+
options = {
|
184
|
+
googlekey: 'xyz',
|
185
|
+
pageurl: 'http://example.com/example=1',
|
186
|
+
action: 'verify',
|
187
|
+
min_score: 0.3
|
188
|
+
}
|
189
|
+
|
190
|
+
captcha = client.decode_recaptcha_v3(options)
|
191
|
+
captcha.text # Solution of the captcha
|
192
|
+
captcha.id # Numeric ID of the captcha solved by TwoCaptcha
|
193
|
+
```
|
194
|
+
|
195
|
+
The solution (`captcha.text`) will be a code that validates the form, like the
|
196
|
+
following:
|
197
|
+
|
198
|
+
```ruby
|
199
|
+
"1JJHJ_VuuHAqJKxcaasbTsqw-L1Sm4gD57PTeaEr9-MaETG1vfu2H5zlcwkjsRoZoHxx6V9yUDw8Ig-hYD8kakmSnnjNQd50w_Y_tI3aDLp-s_7ZmhH6pcaoWWsid5hdtMXyvrP9DscDuCLBf7etLle8caPWSaYCpAq9DOTtj5NpSg6-OeCJdGdkjsakFUMeGeqmje87wSajcjmdjl_w4XZBY2zy8fUH6XoAGZ6AeCTulIljBQDObQynKDd-rutPvKNxZasDk-LbhTfw508g1lu9io6jnvm3kbAdnkfZ0x0PkGiUMHU7hnuoW6bXo2Yn_Zt5tDWL7N7wFtY6B0k7cTy73f8er508zReOuoyz2NqL8smDCmcJu05ajkPGt20qzpURMwHaw"
|
200
|
+
```
|
201
|
+
|
202
|
+
## hCaptcha
|
203
|
+
|
204
|
+
This method allows you to solve hCaptcha.
|
205
|
+
|
206
|
+
There are two methods available:
|
207
|
+
|
208
|
+
- `decode_hcaptcha`: solves hCaptcha CAPTCHAs. It doesn't raise exceptions.
|
209
|
+
- `decode_hcaptcha!`: solves hCaptcha CAPTCHAs. It may raise an error if something goes wrong.
|
210
|
+
|
211
|
+
**Send the `sitekey` and `pageurl` parameters**
|
212
|
+
|
213
|
+
This method requires no browser emulation. You can send two parameters that
|
214
|
+
identify the website in which the CAPTCHA is found.
|
215
|
+
|
216
|
+
```ruby
|
217
|
+
options = {
|
218
|
+
sitekey: 'xyz',
|
219
|
+
pageurl: 'http://example.com/example=1'
|
220
|
+
}
|
221
|
+
|
222
|
+
captcha = client.decode_hcaptcha!(options)
|
223
|
+
captcha.text # Solution of the captcha
|
224
|
+
```
|
225
|
+
|
164
226
|
## Notes
|
165
227
|
|
166
228
|
#### Thread-safety
|
data/lib/two_captcha/client.rb
CHANGED
@@ -105,32 +105,114 @@ module TwoCaptcha
|
|
105
105
|
|
106
106
|
fail(TwoCaptcha::GoogleKey) if options[:googlekey].empty?
|
107
107
|
|
108
|
-
|
108
|
+
upload_options = {
|
109
109
|
method: 'userrecaptcha',
|
110
110
|
googlekey: options[:googlekey],
|
111
111
|
pageurl: options[:pageurl]
|
112
112
|
}
|
113
|
+
decoded_captcha = upload(upload_options)
|
113
114
|
|
114
|
-
|
115
|
-
|
115
|
+
# pool untill the answer is ready
|
116
|
+
while decoded_captcha.text.to_s.empty?
|
117
|
+
sleep([polling, 10].max) # sleep at least 10 seconds
|
118
|
+
decoded_captcha = captcha(decoded_captcha.id)
|
119
|
+
fail TwoCaptcha::Timeout if (Time.now - started_at) > timeout
|
120
|
+
end
|
116
121
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
122
|
+
decoded_captcha
|
123
|
+
end
|
124
|
+
|
125
|
+
#
|
126
|
+
# Solve reCAPTCHA v3.
|
127
|
+
#
|
128
|
+
# @param [Hash] options Options hash. Check docs for the method decode!.
|
129
|
+
#
|
130
|
+
# @return [TwoCaptcha::Captcha] The solution of the given captcha.
|
131
|
+
#
|
132
|
+
def decode_recaptcha_v3(options = {})
|
133
|
+
decode_recaptcha_v3!(options)
|
134
|
+
rescue TwoCaptcha::Error => ex
|
135
|
+
TwoCaptcha::Captcha.new
|
136
|
+
end
|
137
|
+
|
138
|
+
#
|
139
|
+
# Solve reCAPTCHA v3.
|
140
|
+
#
|
141
|
+
# @param [Hash] options Options hash.
|
142
|
+
# @option options [String] :googlekey The open key of the site in which recaptcha is installed.
|
143
|
+
# @option options [String] :pageurl The URL of the page where the recaptcha is encountered.
|
144
|
+
# @option options [String] :action The action paramenter present on the page that uses recaptcha.
|
145
|
+
# @option options [String] :min_score The minimum score necessary to pass the challenge.
|
146
|
+
#
|
147
|
+
# @return [TwoCaptcha::Captcha] The solution of the given captcha.
|
148
|
+
#
|
149
|
+
def decode_recaptcha_v3!(options = {})
|
150
|
+
started_at = Time.now
|
151
|
+
|
152
|
+
fail(TwoCaptcha::GoogleKey) if options[:googlekey].empty?
|
153
|
+
|
154
|
+
upload_options = {
|
155
|
+
method: 'userrecaptcha',
|
156
|
+
version: 'v3',
|
157
|
+
googlekey: options[:googlekey],
|
158
|
+
pageurl: options[:pageurl],
|
159
|
+
action: options[:action],
|
160
|
+
min_score: options[:min_score]
|
121
161
|
}
|
162
|
+
decoded_captcha = upload(upload_options)
|
122
163
|
|
123
|
-
|
124
|
-
|
164
|
+
# pool untill the answer is ready
|
165
|
+
while decoded_captcha.text.to_s.empty?
|
166
|
+
sleep([polling, 10].max) # sleep at least 10 seconds
|
167
|
+
decoded_captcha = captcha(decoded_captcha.id)
|
168
|
+
fail TwoCaptcha::Timeout if (Time.now - started_at) > timeout
|
169
|
+
end
|
125
170
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
171
|
+
decoded_captcha
|
172
|
+
end
|
173
|
+
|
174
|
+
#
|
175
|
+
# Solve hCaptcha.
|
176
|
+
#
|
177
|
+
# @param [Hash] options Options hash. Check docs for the method decode_hcaptcha!.
|
178
|
+
#
|
179
|
+
# @return [TwoCaptcha::Captcha] The solution of the given captcha.
|
180
|
+
#
|
181
|
+
def decode_hcaptcha(options = {})
|
182
|
+
decode_hcaptcha!(options)
|
183
|
+
rescue TwoCaptcha::Error => ex
|
184
|
+
TwoCaptcha::Captcha.new
|
185
|
+
end
|
186
|
+
|
187
|
+
#
|
188
|
+
# Solve hCaptcha.
|
189
|
+
#
|
190
|
+
# @param [Hash] options Options hash.
|
191
|
+
# @option options [String] :sitekey The key of the site in which hCaptcha is installed.
|
192
|
+
# @option options [String] :pageurl The URL of the page where the recaptcha is encountered.
|
193
|
+
#
|
194
|
+
# @return [TwoCaptcha::Captcha] The solution of the given captcha.
|
195
|
+
#
|
196
|
+
def decode_hcaptcha!(options = {})
|
197
|
+
started_at = Time.now
|
198
|
+
|
199
|
+
fail(TwoCaptcha::GoogleKey) if options[:sitekey].empty?
|
200
|
+
|
201
|
+
upload_options = {
|
202
|
+
method: 'hcaptcha',
|
203
|
+
sitekey: options[:sitekey],
|
204
|
+
pageurl: options[:pageurl]
|
205
|
+
}
|
206
|
+
decoded_captcha = upload(upload_options)
|
207
|
+
|
208
|
+
# pool untill the answer is ready
|
209
|
+
while decoded_captcha.text.to_s.empty?
|
210
|
+
sleep([polling, 10].max) # sleep at least 10 seconds
|
211
|
+
decoded_captcha = captcha(decoded_captcha.id)
|
130
212
|
fail TwoCaptcha::Timeout if (Time.now - started_at) > timeout
|
131
213
|
end
|
132
214
|
|
133
|
-
|
215
|
+
decoded_captcha
|
134
216
|
end
|
135
217
|
|
136
218
|
# Upload a captcha to 2Captcha.
|
@@ -141,8 +223,8 @@ module TwoCaptcha
|
|
141
223
|
#
|
142
224
|
def upload(options = {})
|
143
225
|
args = {}
|
144
|
-
args[:body] = options[:raw64]
|
145
|
-
args[:method] = 'base64'
|
226
|
+
args[:body] = options[:raw64] if options[:raw64]
|
227
|
+
args[:method] = options[:method] || 'base64'
|
146
228
|
args.merge!(options)
|
147
229
|
response = request('in', :multipart, args)
|
148
230
|
|
@@ -178,11 +260,12 @@ module TwoCaptcha
|
|
178
260
|
# Report incorrectly solved captcha for refund.
|
179
261
|
#
|
180
262
|
# @param [Integer] id Numeric ID of the captcha.
|
263
|
+
# @param [Integer] action 'reportbad' (default) or 'reportgood'.
|
181
264
|
#
|
182
265
|
# @return [Boolean] true if correctly reported
|
183
266
|
#
|
184
|
-
def report!(captcha_id)
|
185
|
-
response = request('res', :get, action:
|
267
|
+
def report!(captcha_id, action = 'reportbad')
|
268
|
+
response = request('res', :get, action: action, id: captcha_id)
|
186
269
|
response == 'OK_REPORT_RECORDED'
|
187
270
|
end
|
188
271
|
|
data/lib/two_captcha/errors.rb
CHANGED
@@ -14,6 +14,24 @@ module TwoCaptcha
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
class Timeout < Error
|
18
|
+
def initialize
|
19
|
+
super('The captcha was not solved in the expected time')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class GoogleKey < Error
|
24
|
+
def initialize
|
25
|
+
super('Missing googlekey parameter')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class SiteKey < Error
|
30
|
+
def initialize
|
31
|
+
super('Missing sitekey parameter')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
17
35
|
class WrongUserKey < Error
|
18
36
|
def initialize
|
19
37
|
super('Wrong “key” parameter format, it should contain 32 symbols')
|
@@ -92,15 +110,27 @@ module TwoCaptcha
|
|
92
110
|
end
|
93
111
|
end
|
94
112
|
|
95
|
-
class
|
113
|
+
class CaptchaImageBlocked < Error
|
96
114
|
def initialize
|
97
|
-
super('
|
115
|
+
super('You have sent an image, that is unrecognizable and which is saved in our database as such. Usually this happens when the site where you get the captcha from has stopped sending you captcha and started giving you a “deny access” cap.')
|
98
116
|
end
|
99
117
|
end
|
100
118
|
|
101
|
-
class
|
119
|
+
class WrongCaptchaId < Error
|
102
120
|
def initialize
|
103
|
-
super('
|
121
|
+
super('You are trying to get the answer or complain a captcha that was submitted more than 15 minutes ago.')
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
class BadDuplicates < Error
|
126
|
+
def initialize
|
127
|
+
super('Error is returned when 100% accuracy feature is enabled. The error means that max numbers of tries is reached but min number of matches not found.')
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
class ReportNotRecorded < Error
|
132
|
+
def initialize
|
133
|
+
super('Error is returned to your complain request (reportbad) if you already complained lots of correctly solved captchas.')
|
104
134
|
end
|
105
135
|
end
|
106
136
|
|
@@ -118,6 +148,10 @@ module TwoCaptcha
|
|
118
148
|
'ERROR_WRONG_ID_FORMAT' => TwoCaptcha::WrongIdFormat,
|
119
149
|
'ERROR_CAPTCHA_UNSOLVABLE' => TwoCaptcha::CaptchaUnsolvable,
|
120
150
|
'ERROR_EMPTY_ACTION' => TwoCaptcha::EmptyAction,
|
121
|
-
'ERROR_GOOGLEKEY' => TwoCaptcha::GoogleKey
|
151
|
+
'ERROR_GOOGLEKEY' => TwoCaptcha::GoogleKey,
|
152
|
+
'ERROR_CAPTCHAIMAGE_BLOCKED' => TwoCaptcha::CaptchaImageBlocked,
|
153
|
+
'ERROR_WRONG_CAPTCHA_ID' => TwoCaptcha::WrongCaptchaId,
|
154
|
+
'ERROR_BAD_DUPLICATES' => TwoCaptcha::BadDuplicates,
|
155
|
+
'REPORT_NOT_RECORDED' => TwoCaptcha::ReportNotRecorded,
|
122
156
|
}
|
123
157
|
end
|
data/lib/two_captcha/version.rb
CHANGED
data/spec/lib/client_spec.rb
CHANGED
@@ -92,4 +92,22 @@ describe TwoCaptcha::Client do
|
|
92
92
|
it { expect(@captcha.id).to match(/[0-9]{9}/) }
|
93
93
|
end
|
94
94
|
end
|
95
|
+
|
96
|
+
context 'image reCAPTCHA v2' do
|
97
|
+
before(:all) { @client = TwoCaptcha.new(key) }
|
98
|
+
|
99
|
+
describe '#decode_recaptcha_v2!' do
|
100
|
+
before(:all) do
|
101
|
+
options = {
|
102
|
+
googlekey: '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
|
103
|
+
pageurl: 'https://www.google.com/recaptcha/api2/demo'
|
104
|
+
}
|
105
|
+
@captcha = @client.decode_recaptcha_v2!(options)
|
106
|
+
end
|
107
|
+
|
108
|
+
it { expect(@captcha).to be_a(TwoCaptcha::Captcha) }
|
109
|
+
it { expect(@captcha.text.size).to be > 50 } # not perfect, I know
|
110
|
+
it { expect(@captcha.id).to match(/[0-9]{9}/) }
|
111
|
+
end
|
112
|
+
end
|
95
113
|
end
|
data/two_captcha.gemspec
CHANGED
@@ -6,7 +6,7 @@ require 'two_captcha/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "two_captcha"
|
8
8
|
spec.version = TwoCaptcha::VERSION
|
9
|
-
spec.authors = ["
|
9
|
+
spec.authors = ["Rafael Barbolo", "Rafael Ivan Garcia"]
|
10
10
|
spec.email = ["team@infosimples.com.br"]
|
11
11
|
spec.summary = %q{Ruby API for 2Captcha (Captcha Solver as a Service)}
|
12
12
|
spec.description = %q{TwoCaptcha allows you to solve captchas with manual labor}
|
@@ -14,7 +14,11 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
|
-
|
17
|
+
|
18
|
+
# Since our currently binstubs are used only during the gem's development, we
|
19
|
+
# are ignoring them in the gem specification.
|
20
|
+
# spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
21
|
+
|
18
22
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
23
|
spec.require_paths = ["lib"]
|
20
24
|
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: two_captcha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Marcelo Mita
|
8
7
|
- Rafael Barbolo
|
9
|
-
|
8
|
+
- Rafael Ivan Garcia
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-01-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -56,9 +56,7 @@ dependencies:
|
|
56
56
|
description: TwoCaptcha allows you to solve captchas with manual labor
|
57
57
|
email:
|
58
58
|
- team@infosimples.com.br
|
59
|
-
executables:
|
60
|
-
- console
|
61
|
-
- setup
|
59
|
+
executables: []
|
62
60
|
extensions: []
|
63
61
|
extra_rdoc_files: []
|
64
62
|
files:
|
@@ -66,6 +64,7 @@ files:
|
|
66
64
|
- ".rspec"
|
67
65
|
- ".travis.yml"
|
68
66
|
- CODE_OF_CONDUCT.md
|
67
|
+
- Changelog.md
|
69
68
|
- Gemfile
|
70
69
|
- LICENSE.txt
|
71
70
|
- README.md
|
@@ -89,7 +88,7 @@ homepage: https://github.com/infosimples/two_captcha
|
|
89
88
|
licenses:
|
90
89
|
- MIT
|
91
90
|
metadata: {}
|
92
|
-
post_install_message:
|
91
|
+
post_install_message:
|
93
92
|
rdoc_options: []
|
94
93
|
require_paths:
|
95
94
|
- lib
|
@@ -104,9 +103,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
103
|
- !ruby/object:Gem::Version
|
105
104
|
version: '0'
|
106
105
|
requirements: []
|
107
|
-
|
108
|
-
|
109
|
-
signing_key:
|
106
|
+
rubygems_version: 3.0.6
|
107
|
+
signing_key:
|
110
108
|
specification_version: 4
|
111
109
|
summary: Ruby API for 2Captcha (Captcha Solver as a Service)
|
112
110
|
test_files:
|