Developed by Infosimples, a brazilian company that offers data extraction solutions and Ruby on Rails development.
TwoCaptcha is a Ruby API for 2Captcha - 2Captcha.com.
Add this line to your application's Gemfile:
gem 'two_captcha'
And then execute:
$ bundle
Or install it yourself as:
$ gem install two_captcha
- Create a client
# Create a client
client = TwoCaptcha.new('my_captcha_key')
- Solve a captcha
There are two methods available: decode and decode! * decode doesn't raise exceptions. * decode! may raise a TwoCaptcha::Error if something goes wrong.
If the solution is not available, an empty captcha object will be returned.
captcha = client.decode!(url: 'http://bit.ly/1xXZcKo')
captcha.text # Solution of the captcha
captcha.id # Numeric ID of the captcha solved by TwoCaptcha
You can also specify path, file, raw and raw64 when decoding an image.
client.decode(path: 'path/to/my/captcha/file')
client.decode(file: File.open('path/to/my/captcha/file', 'rb'))
client.decode(raw: File.open('path/to/my/captcha/file', 'rb').read)
client.decode(raw64: Base64.encode64(File.open('path/to/my/captcha/file', 'rb').read))
Internally, the gem will always convert the image to raw64 (binary base64 encoded).
You may also specify any POST parameters specified at https://2captcha.com/setting.
- Retrieve a previously solved captcha
captcha = client.captcha('130920620') # with 130920620 as the captcha id
- Report incorrectly solved captcha for refund
client.report!('130920620') # with 130920620 as the captcha id
# return true if successfully reported
Warning: do not abuse on this method, otherwise you may get banned
- Get your balance on 2Captcha
client.balance
# return a Float balance in USD.
- Get usage statistics for a specific date
client.stats('2015-08-05')
# return an XML string with your usage statistics.
- Get current 2Captcha load
client.load
# return an XML string with the current service load.
To solve captchas similar to reCAPTCHA v2, you can add the param 'id_constructor: 23' to your request.
Please read the oficial documentation at https://2captcha.com/support/faq/30/ for more information.
client.decode(url: 'http://bit.ly/1xXZcKo', id_constructor: 23)
Captcha (screenshot)
the argument is passed as url, path, file, raw or raw64
The response will be an array containing the indexes for each image that should be clicked counting from left to right. For the captcha above it should look something like:
# captcha.indexes
[1, 9]
The API is thread-safe, which means it is perfectly fine to share a client instance between multiple threads.
TwoCaptcha don't require specific dependencies. That saves you memory and avoid conflicts with other gems.
Any format you use in the decode method (url, file, path, raw, raw64) will always be converted to a raw64, which is a binary base64 encoded string. So, if you already have this format available on your side, there's no need to do convertions before calling the API.
Our recomendation is to never convert your image format, unless needed. Let the gem convert internally. It may save you resources (CPU, memory and IO).
TwoCaptcha gem uses Semantic Versioning.
- MRI 2.2.2
- MRI 2.2.0
- MRI 2.1.4
- MRI 2.0.0
- Fork it ( https://github.com/infosimples/two_captcha/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Run/add tests (RSpec)
- Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
- Yay. Thanks for contributing :)
All contributors: https://github.com/infosimples/two_captcha/graphs/contributors
MIT License. Copyright (C) 2011-2015 Infosimples. https://infosimples.com/