diff --git a/README.md b/README.md index a4027bb..33c06a1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Ruby 2Captcha API Client -This is the easiest way to quickly integrate 2Captcha into your code and automate solving of any type of captcha. +This is the easiest way to quickly integrate [2Captcha] into your code and automate solving of any type of captcha. A Ruby client for the 2Captcha API. @@ -37,7 +37,8 @@ A Ruby client for the 2Captcha API. - [send / get_result](#send--get_result) - [balance](#balance) - [report](#report) - - [Error handling](#error-handling) +- [Proxies](#proxies) +- [Error handling](#error-handling) ## Installation Add this line to your application's Gemfile: @@ -74,15 +75,15 @@ client.api_key = "YOUR_API_KEY" ### Client instance options -|Option|Default value|Description| -|---|---|---| -|soft_id|-|your software ID obtained after publishing in [2captcha sofware catalog]| -|callback|-|URL of your web-sever that receives the captcha recognition result. The URl should be first registered in [pingback settings] of your account| -|default_timeout|120|Timeout in seconds for all captcha types except reCAPTCHA. Defines how long the module tries to get the answer from `res.php` API endpoint| -|polling_interval|10|Interval in seconds between requests to `res.php` API endpoint, setting values less than 5 seconds is not recommended| +|Option |Default value|Description | +|----------------|-------------|------------------------------------------------------------------------| +|soft_id |- |your software ID obtained after publishing in [2captcha sofware catalog]| +|callback |- |URL of your web-sever that receives the captcha recognition result. The URl should be first registered in [pingback settings] of your account| +|default_timeout |120 |Timeout in seconds for all captcha types except reCAPTCHA. Defines how long the module tries to get the answer from `res.php` API endpoint| +|polling_interval|10 |Interval in seconds between requests to `res.php` API endpoint, setting values less than 5 seconds is not recommended| > **IMPORTANT:** once `callback` is defined for `Client` instance, all methods return only the captcha ID and DO NOT poll the API to get the result. The result will be sent to the callback URL. -To get the answer manually use [get_result method](#send--getresult) +To get the answer manually use [get_result method](#send--get_result) ## Solve captcha When you submit any image-based captcha use can provide additional options to help 2captcha workers to solve it properly. @@ -90,15 +91,15 @@ When you submit any image-based captcha use can provide additional options to he ### Captcha options | Option | Default Value | Description | | ------------- | ------------- | -------------------------------------------------------------------------------------------------- | -| numeric | 0 | Defines if captcha contains numeric or other symbols [see more info in the API docs][post options] | -| min_len | 0 | minimal answer lenght | -| max_len | 0 | maximum answer length | +| numeric | 0 | Defines if captcha contains numeric or other symbols [see more info in the API docs][normal_post] | +| min_len | 0 | minimal answer lenght | +| max_len | 0 | maximum answer length | | phrase | 0 | defines if the answer contains multiple words or not | -| case_sensitive | 0 | defines if the answer is case sensitive | +| case_sensitive| 0 | defines if the answer is case sensitive | | calc | 0 | defines captcha requires calculation | | lang | - | defines the captcha language, see the [list of supported languages] | -| hint_image | - | an image with hint shown to workers with the captcha, translated into instructionsimg API parameter | -| hint_text | - | hint or task text shown to workers with the captcha | +| hint_image | - | an image with hint shown to workers with the captcha, translated into instructionsimg API parameter | +| hint_text | - | hint or task text shown to workers with the captcha | Below you can find basic examples for every captcha type, check out the code below. @@ -419,8 +420,24 @@ Use this method to report good or bad captcha answer. client.report(captcha_id, True) # captcha solved correctly client.report(captcha_id, False) # captcha solved incorrectly ``` +## Proxies -### Error handling +You can pass your proxy as an additional argument for methods: recaptcha, funcaptcha, geetest, geetest v4, hcaptcha, keycaptcha, capy puzzle, lemin, turnstile, amazon waf, Cutcaptcha, Friendly captcha, MTCaptcha, DataDome, CyberSiARA and etc. The proxy will be forwarded to the API to solve the captcha. + +We have our own proxies that we can offer you. [Buy residential proxies] for avoid restrictions and blocks. [Quick start]. + +Example solving reCAPTCHA V2 using proxy: +```ruby +result = client.recaptcha_v2({ + googlekey: '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + pageurl: 'https://mysite.com/page/with/recaptcha_v2', + invisible: 1, + proxytype: "https", + proxy: "proxyuser:strongPassword@123.123.123.123:3128" +}) +``` + +## Error handling In case of an error, the captcha solver throws an exception. It's important to properly handle these cases. We recommend using `begin rescue` to handle exceptions. ```ruby begin @@ -439,3 +456,12 @@ In case of an error, the captcha solver throws an exception. It's important to p puts(e) end ``` + + +[2Captcha]: https://2captcha.com/ +[2captcha sofware catalog]: https://2captcha.com/software +[pingback settings]: https://2captcha.com/setting/pingback +[normal_post]: https://2captcha.com/2captcha-api#normal_post +[list of supported languages]: https://2captcha.com/2captcha-api#language +[Buy residential proxies]: https://2captcha.com/proxy/residential-proxies +[Quick start]: https://2captcha.com/proxy?openAddTrafficModal=true \ No newline at end of file diff --git a/README.ru.md b/README.ru.md index 9caea88..98efbe2 100644 --- a/README.ru.md +++ b/README.ru.md @@ -1,17 +1,17 @@ # Ruby 2Captcha API Client -Это самый простой способ быстро интегрировать 2Captcha в ваш код и автоматизировать решение любого типа капчи. +Это самый простой способ быстро интегрировать [2Captcha] в ваш код и автоматизировать решение любого типа капчи. Ruby-клиент для API 2Captcha. -- [Установка](#installation) -- [Настройка](#configuration) - - [Опции экземпляра клиента](#client-instance-options) -- [Решение капчи](#solve-captcha) - - [Обычная капча](#normal-captcha) - - [Текстовая капча](#text-captcha) - - [ReCaptcha v2](#recaptcha-v2) - - [ReCaptcha v3](#recaptcha-v3) +- [Установка](#установка) +- [Настройка](#настройка) + - [Опции экземпляра клиента](#опции-экземпляра-клиента) +- [Решение капчи](#решение-капчи) + - [Обычная капча](#обычная-капча) + - [Текстовая капча](#текстовая-капча) + - [reCAPTCHA v2](#recaptcha-v2) + - [reCAPTCHA v3](#recaptcha-v3) - [FunCaptcha](#funcaptcha) - [GeeTest](#geetest) - [hCaptcha](#hcaptcha) @@ -31,23 +31,27 @@ Ruby-клиент для API 2Captcha. - [MTCaptcha](#mtcaptcha) - [Friendly captcha](#friendly-captcha) - [Cutcaptcha](#cutcaptcha) -- [Другие методы](#other-methods) +- [Другие методы](#другие-методы) - [send / get_result](#send--get_result) - - [balance](#balance) - - [report](#report) - - [Обработка ошибок](#error-handling) + - [Баланс](#баланс) + - [Отчет](#отчет) +- [Прокси](#прокси) +- [Обработка ошибок](#обработка-ошибок) ## Установка Автоматическая установка гема с помощью Bundler. Добавьте следующую строку в ваш Gemfile: + ```ruby gem 'ruby-2captcha' ``` Затем выполните следующую команду в терминале: + ```ruby bundle install ``` Или установите его самостоятельно, выполнив следующую команду в терминале: + ```ruby gem install ruby-2captcha ``` @@ -65,7 +69,7 @@ require 'api_2captcha' client = Api2Captcha.new("YOUR_API_KEY") ``` - +### Опции экземпляра клиента У вас также есть возможность настроить некоторые параметры экземпляра Api2Captcha: ```ruby @@ -85,7 +89,7 @@ client.polling_interval(10) | Параметр | Значение по умолчанию | Описание | |-------------------|---------------|-------------------------------------------------------------------------------------------------------------------------------| -| numeric | 0 | Определяет, содержит ли капча числа или другие символы [подробнее см. в документации по API](https://2captcha.com/2captcha-api#normal_post) | +| numeric | 0 | Определяет, содержит ли капча числа или другие символы [подробнее см. в документации по API](https://2captcha.com/2captcha-api#solving_normal_captcha) | | min_len | 0 | Минимальная длина ответа length | | max_len | 0 | Максимальная длина ответа length | | phrase | 0 | Определяет, содержит ли ответ несколько слов или нет | @@ -99,6 +103,7 @@ client.polling_interval(10) ### Обычная капча Для обхода обычной капчи (искаженный текст на картинке) используйте следующий метод. Этот метод также может использоваться для распознавания любого текста на картинке. + ```ruby result = client.normal({ image: 'path/to/captcha.jpg'}) # OR @@ -106,9 +111,10 @@ result = client.normal({ image: 'https://site-with-captcha.com/path/to/captcha.jpg' }) ``` - ### Текстовая капча + Этот метод может использоваться для обхода капчи, которая требует ответить на вопрос, представленный в явном виде. + ```ruby result = client.text({ textcaptcha:'Если завтра суббота, то какой сегодня день?', @@ -116,8 +122,9 @@ result = client.text({ }) ``` -### ReCaptcha v2 -Используйте этот метод для решения ReCaptcha V2 и получения токена для обхода защиты. +### reCAPTCHA v2 +Используйте этот метод для решения reCAPTCHA v2 и получения токена для обхода защиты. + ```ruby result = client.recaptcha_v2({ googlekey: '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', @@ -126,8 +133,9 @@ result = client.recaptcha_v2({ }) ``` -### ReCaptcha v3 -Этот метод предоставляет решение для ReCaptcha V3 и возвращает токен. +### reCAPTCHA v3 +Этот метод предоставляет решение для reCAPTCHA v3 и возвращает токен. + ```ruby result = client.recaptcha_v3({ googlekey: '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', @@ -140,6 +148,7 @@ result = client.recaptcha_v3({ ### FunCaptcha Метод решения FunCaptcha (Arkoselabs). Он возвращает токен. + ```ruby result = client.funcaptcha({ publickey: "69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC", @@ -149,6 +158,7 @@ result = client.funcaptcha({ ### GeeTest Метод для решения головоломки GeeTest captcha. Он возвращает набор токенов в формате JSON. + ```ruby result = client.geetest({ gt: 'f1ab2cdefa3456789012345b6c78d90e', @@ -160,6 +170,7 @@ result = client.geetest({ ### hCaptcha Метод решения hCaptcha. Он возвращает токен для обхода капчи. + ```ruby result = client.hcaptcha({ sitekey: '10000000-ffff-ffff-ffff-000000000001', @@ -169,6 +180,7 @@ result = client.hcaptcha({ ### KeyCaptcha Метод на основе токенов для решения KeyCaptcha. + ```ruby result = client.keycaptcha({ s_s_c_user_id: 10, @@ -181,6 +193,7 @@ result = client.keycaptcha({ ### Capy Метод основан на использовании токенов для обхода паззла Capy. + ```ruby result = client.capy({ sitekey: 'PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v', @@ -191,6 +204,7 @@ result = client.capy({ ### Grid Метод сетки изначально называется методом Old ReCaptcha V2. Этот метод может быть использован для обхода любого типа капчи, где вы можете применить сетку к изображению и необходимо кликнуть по определенным ячейкам сетки. Он возвращает количество выбранных ячеек. + ```ruby result = client.grid({ image: 'path/to/captcha.jpg', @@ -205,6 +219,7 @@ result = client.grid({ ### Canvas Метод Canvas может быть использован, когда вам необходимо нарисовать линию вокруг объекта на изображении. Он возвращает набор координат точек для рисования многоугольника. + ```ruby result = client.canvas({ image: 'path/to/captcha.jpg', @@ -217,6 +232,7 @@ result = client.canvas({ ### ClickCaptcha Метод ClickCaptcha возвращает координаты точек на изображении капчи. Может быть использован, если вам необходимо кликнуть по определенным точкам на изображении. + ```ruby result = client.coordinates({ image: 'path/to/captcha.jpg', @@ -228,6 +244,7 @@ result = client.coordinates({ ### Rotate Этот метод может быть использован для решения капчи, которая просит повернуть объект. В основном используется для обхода FunCaptcha. Он возвращает угол поворота. + ```ruby result = client.rotate({ image: 'path/to/captcha.jpg', @@ -238,8 +255,10 @@ result = client.rotate({ }) ``` + ### Lemin Cropped Captcha Используйте этот метод для решения задания hCaptcha. Он возвращает JSON-ответ с указанными значениями: ответ (answer) и идентификатор задания (challenge_id). + ```ruby result = client.lemin({ captcha_id: 'CROPPED_1abcd2f_a1234b567c890d12ef3a456bc78d901d', @@ -249,8 +268,10 @@ result = client.lemin({ }) ``` + ### Cloudflare Turnstile Используйте этот метод для решения задачи Cloudflare Turnstile. Он возвращает JSON с токеном. + ```ruby result = client.turnstile({ sitekey: '0x1AAAAAAAAkg0s2VIOD34y5', @@ -260,6 +281,7 @@ result = client.turnstile({ ### Amazon WAF Используйте этот метод для решения Captcha Amazon WAF, также известного как AWS WAF Captcha, который является частью интеллектуальной защиты от угроз для Amazon AWS. Он возвращает JSON с токеном. + ```ruby result = client.amazon_waf({ sitekey: '0x1AAAAAAAAkg0s2VIOD34y5', @@ -273,6 +295,7 @@ result = client.amazon_waf({ ### GeeTest v4 Используйте этот метод для решения GeeTest v4. Он возвращает ответ в формате JSON. + ```ruby result = client.geetest_v4({ captcha_id: 'e392e1d7fd421dc63325744d5a2b9c73', @@ -282,6 +305,7 @@ result = client.geetest_v4({ ### Audio Этот метод можно использовать для решения аудио-капчи. + ```ruby result = client.audio({ audio: 'path/to/audio.jpg', @@ -291,6 +315,7 @@ result = client.audio({ ### CyberSiARA Метод решения CyberSiARA. Он возвращает токен для обхода капчи. + ```ruby result = client.cyber_siara({ pageurl: "https://test.com", @@ -301,6 +326,7 @@ result = client.cyber_siara({ ### DataDome Метод решения DataDome вернет токен для обхода капчи. Чтобы решить капчу DataDome вы должны обязательно использовать прокси. + ```ruby result = client.data_dome({ pageurl: "https://test.com", @@ -310,8 +336,10 @@ result = client.data_dome({ }) ``` + ### MTCaptcha Метод решения MTCaptcha. Он возвращает токен для обхода капчи. + ```ruby result = client.mt_captcha({ pageurl: "https://service.mtcaptcha.com/mtcv1/demo/index.html", @@ -319,8 +347,10 @@ result = client.mt_captcha({ }) ``` + ### Friendly captcha Метод решения Friendly captcha. Он возвращает токен для обхода капчи. + ```ruby result = client.friendly({ pageurl: "https://example.com", @@ -328,8 +358,10 @@ result = client.friendly({ }) ``` + ### Cutcaptcha Метод решения Cutcaptcha. Он возвращает токен для обхода капчи. + ```ruby result = client.cutcaptcha({ misery_key: "a1488b66da00bf332a1488993a5443c79047e752", @@ -338,10 +370,12 @@ result = client.cutcaptcha({ }) ``` + ## Другие методы ### send / get_result Эти методы могут быть использованы для ручного отправления капчи и получения результата. + ```ruby # пример для обычной капчи captcha_id = client.send('path/to/captcha.jpg') @@ -360,22 +394,42 @@ time.sleep(20) # Получить готовый результат result = client.get_result(captcha_id) ``` - ### Баланс Используйте этот метод, чтобы посмотреть баланс в вашем аккаунте. + ```ruby balance = client.get_balance ``` ### Отчет Используйте этот метод для отправки отчета о правильном или неправильном ответе на капчу. + ```ruby client.report(captcha_id, True) # капча решена правильно client.report(captcha_id, False) # капча решена неправильно ``` -### Обработка ошибок +## Прокси + +Вы можете передать свой прокси-сервер в качестве дополнительного аргумента для методов: recaptcha, funcaptcha, geetest, geetest v4, hcaptcha, keycaptcha, capy puzzle, lemin, turnstile, amazon waf, Cutcaptcha, Friendly captcha, MTCaptcha, DataDome, CyberSiARA и других. Передынный Прокси-сервер будет перенаправлен в API и будет использован для загрузки капчи. + +У нас есть свои собственные прокси-серверы, которые мы можем вам предложить. [Купить резидентские прокси] чтобы избежать ограничений и блокировок. [Быстрый старт]. + +Пример решения reCAPTCHA V2 с использованием прокси-сервера: + +```ruby +result = client.recaptcha_v2({ + googlekey: '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + pageurl: 'https://mysite.com/page/with/recaptcha_v2', + invisible: 1, + proxytype: "https", + proxy: "proxyuser:strongPassword@123.123.123.123:3128" +}) +``` + +## Обработка ошибок В случае ошибки при решении капчи генерируется исключение. Важно правильно обрабатывать такие случаи. Мы рекомендуем использовать конструкцию `begin rescue` для обработки. + ```ruby begin result = client.text('Если завтра суббота, то какой сегодня день?') @@ -393,3 +447,8 @@ client.report(captcha_id, False) # капча решена неправильн puts(e) end ``` + + +[2Captcha]: https://2captcha.com/ +[Купить резидентские прокси]: https://2captcha.com/proxy/residential-proxies +[Быстрый старт]: https://2captcha.com/proxy?openAddTrafficModal=true \ No newline at end of file diff --git a/lib/api_2captcha/client.rb b/lib/api_2captcha/client.rb index 60fc8ee..d3a03a0 100644 --- a/lib/api_2captcha/client.rb +++ b/lib/api_2captcha/client.rb @@ -23,7 +23,7 @@ def initialize(api_key, callback = nil) @default_timeout = 120 @recaptcha_timeout = 600 @polling_interval = 10 - @soft_id = 0 + @soft_id = 4584 @domain = DEFAULT_DOMAIN end