diff --git a/README.md b/README.md
index 97224a9..d07e1f8 100644
--- a/README.md
+++ b/README.md
@@ -12,19 +12,20 @@
This is the easiest way to quickly integrate [2Captcha] into your code and automate solving of any type of captcha.
Examples of API requests for different captcha types are available on the [Ruby captcha solver](https://2captcha.com/lang/ruby) page.
-A Ruby client for the 2Captcha API.
- [Ruby 2Captcha API Client (captcha solver)](#ruby-2captcha-api-client-captcha-solver)
- [Installation](#installation)
- [Configuration](#configuration)
- [Client instance options](#client-instance-options)
- [Solve captcha](#solve-captcha)
+ - [Captcha options](#captcha-options)
- [Normal Captcha](#normal-captcha)
- - [Text](#text-captcha)
+ - [Text Captcha](#text-captcha)
- [reCAPTCHA v2](#recaptcha-v2)
- [reCAPTCHA v3](#recaptcha-v3)
- [reCAPTCHA Enterprise](#recaptcha-enterprise)
- [FunCaptcha](#funcaptcha)
- [GeeTest](#geetest)
+ - [GeeTest V4](#geetest-v4)
- [hCaptcha](#hcaptcha)
- [KeyCaptcha](#keycaptcha)
- [Capy](#capy)
@@ -32,23 +33,25 @@ A Ruby client for the 2Captcha API.
- [Canvas](#canvas)
- [ClickCaptcha](#clickcaptcha)
- [Rotate](#rotate)
- - [AmazonWAF](#amazon-waf)
- - [CloudflareTurnstile](#cloudflare-turnstile)
+ - [Amazon WAF](#amazon-waf)
+ - [Cloudflare Turnstile](#cloudflare-turnstile)
- [Lemin Cropped Captcha](#lemin-cropped-captcha)
- - [GeeTest V4](#geetest-v4)
- - [Audio](#audio)
+ - [Audio Captcha](#audio-captcha)
- [Yandex](#yandex)
- [CyberSiARA](#cybersiara)
- [DataDome](#datadome)
- [MTCaptcha](#mtcaptcha)
- [Friendly captcha](#friendly-captcha)
- [Cutcaptcha](#cutcaptcha)
+ - [Tencent](#tencent)
+ - [atbCAPTCHA](#atbcaptcha)
- [Other methods](#other-methods)
- [send / get_result](#send--get_result)
- [balance](#balance)
- [report](#report)
- [Proxies](#proxies)
- [Error handling](#error-handling)
+ - [Examples](#examples)
- [Get in touch](#get-in-touch)
- [Join the team πͺ](#join-the-team-)
- [License](#license)
@@ -91,12 +94,14 @@ client.api_key = "YOUR_API_KEY"
|Option |Default value|Description |
|----------------|-------------|------------------------------------------------------------------------|
-|soft_id |- |your software ID obtained after publishing in [2captcha sofware catalog]|
+|soft_id |4584 |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.
+> [!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--get_result)
## Solve captcha
@@ -119,6 +124,9 @@ Below you can find basic examples for every captcha type, check out the code bel
### Normal Captcha
+
+[API method description.](https://2captcha.com/2captcha-api#solving_normal_captcha)
+
To bypass a normal captcha (distorted text on image) use the following method. This method also can be used to recognize any text on the image.
```ruby
result = client.normal({ image: 'path/to/captcha.jpg'})
@@ -129,6 +137,9 @@ result = client.normal({
```
### Text Captcha
+
+[API method description.](https://2captcha.com/2captcha-api#solving_text_captcha)
+
This method can be used to bypass a captcha that requires to answer a question provided in clear text.
```ruby
result = client.text({
@@ -138,6 +149,9 @@ result = client.text({
```
### reCAPTCHA v2
+
+[API method description.](https://2captcha.com/2captcha-api#solving_recaptchav2_new)
+
Use this method to solve reCAPTCHA V2 and obtain a token to bypass the protection.
```ruby
result = client.recaptcha_v2({
@@ -148,6 +162,9 @@ result = client.recaptcha_v2({
```
### reCAPTCHA v3
+
+[API method description.](https://2captcha.com/2captcha-api#solving_recaptchav3)
+
This method provides reCAPTCHA V3 solver and returns a token.
```ruby
result = client.recaptcha_v3({
@@ -160,6 +177,9 @@ result = client.recaptcha_v3({
```
### reCAPTCHA Enterprise
+
+[API method description.](https://2captcha.com/2captcha-api#recaptcha-enterprise)
+
reCAPTCHA Enterprise can be used as reCAPTCHA V2 and reCAPTCHA V3. Below is a usage example for both versions.
```ruby
@@ -182,6 +202,9 @@ result = client.recaptcha_v3({
```
### FunCaptcha
+
+[API method description.](https://2captcha.com/2captcha-api#solving_funcaptcha_new)
+
FunCaptcha (Arkoselabs) solving method. Returns a token.
```ruby
@@ -192,6 +215,9 @@ result = client.funcaptcha({
```
### GeeTest
+
+[API method description.](https://2captcha.com/2captcha-api#solving_geetest)
+
Method to solve GeeTest puzzle captcha. Returns a set of tokens as JSON.
```ruby
result = client.geetest({
@@ -202,7 +228,22 @@ result = client.geetest({
})
```
+### GeeTest v4
+
+[API method description.](https://2captcha.com/2captcha-api#geetest-v4)
+
+Use this method to solve GeeTest v4. Returns the response in JSON.
+```ruby
+result = client.geetest_v4({
+ captcha_id: 'e392e1d7fd421dc63325744d5a2b9c73',
+ pageurl: 'https://www.site.com/page/'
+})
+```
+
### hCaptcha
+
+[API method description.](https://2captcha.com/2captcha-api#solving_hcaptcha)
+
Use this method to solve hCaptcha challenge. Returns a token to bypass captcha.
```ruby
result = client.hcaptcha({
@@ -212,6 +253,9 @@ result = client.hcaptcha({
```
### KeyCaptcha
+
+[API method description.](https://2captcha.com/2captcha-api#solving_keycaptcha)
+
Token-based method to solve KeyCaptcha.
```ruby
result = client.keycaptcha({
@@ -224,6 +268,9 @@ result = client.keycaptcha({
```
### Capy
+
+[API method description.](https://2captcha.com/2captcha-api#solving_capy)
+
Token-based method to bypass Capy puzzle captcha.
```ruby
result = client.capy({
@@ -234,6 +281,9 @@ result = client.capy({
```
### Grid
+
+[API method description.](https://2captcha.com/2captcha-api#grid)
+
Grid method is originally called Old reCAPTCHA V2 method. The method can be used to bypass any type of captcha where you can apply a grid on image and need to click specific grid boxes. Returns numbers of boxes.
```ruby
result = client.grid({
@@ -248,6 +298,9 @@ result = client.grid({
```
### Canvas
+
+[API method description.](https://2captcha.com/2captcha-api#canvas)
+
Canvas method can be used when you need to draw a line around an object on image. Returns a set of points' coordinates to draw a polygon.
```ruby
result = client.canvas({
@@ -260,6 +313,9 @@ result = client.canvas({
```
### ClickCaptcha
+
+[API method description.](https://2captcha.com/2captcha-api#coordinates)
+
ClickCaptcha method returns coordinates of points on captcha image. Can be used if you need to click on particular points on the image.
```ruby
result = client.coordinates({
@@ -271,6 +327,9 @@ result = client.coordinates({
```
### Rotate
+
+[API method description.](https://2captcha.com/2captcha-api#solving_rotatecaptcha)
+
This method can be used to solve a captcha that asks to rotate an object. Mostly used to bypass FunCaptcha. Returns the rotation angle.
```ruby
result = client.rotate({
@@ -283,7 +342,10 @@ result = client.rotate({
```
### Lemin Cropped Captcha
-Use this method to solve hCaptcha challenge. Returns JSON with answer containing the following values: answer, challenge_id.
+
+[API method description.](https://2captcha.com/2captcha-api#lemin)
+
+Use this method to solve Lemin challenge. Returns JSON with answer containing the following values: answer, challenge_id.
```ruby
result = client.lemin({
captcha_id: 'CROPPED_1abcd2f_a1234b567c890d12ef3a456bc78d901d',
@@ -294,6 +356,9 @@ result = client.lemin({
```
### Cloudflare Turnstile
+
+[API method description.](https://2captcha.com/2captcha-api#turnstile)
+
Use this method to solve Cloudflare Turnstile. Returns JSON with the token and User-Agent.
```ruby
result = client.turnstile({
@@ -308,6 +373,9 @@ result = client.turnstile({
```
### Amazon WAF
+
+[API method description.](https://2captcha.com/2captcha-api#amazon-waf)
+
Use this method to solve Amazon WAF Captcha also known as AWS WAF Captcha is a part of Intelligent threat mitigation for Amazon AWS. Returns JSON with the token.
```ruby
result = client.amazon_waf({
@@ -320,20 +388,15 @@ result = client.amazon_waf({
})
```
-### GeeTest v4
-Use this method to solve GeeTest v4. Returns the response in JSON.
-```ruby
-result = client.geetest_v4({
- captcha_id: 'e392e1d7fd421dc63325744d5a2b9c73',
- pageurl: 'https://www.site.com/page/'
-})
-```
+### Audio Captcha
+
+[API method description.](https://2captcha.com/2captcha-api#audio)
-### Audio
-This method can be used to solve a audio captcha
+Use the following method to bypass an audio captcha (mp3 formats only).
+You must provide the language as `lang = 'en'`. Supported languages are "en", "ru", "de", "el", "pt", "fr".
```ruby
result = client.audio({
- audio: 'path/to/audio.jpg',
+ audio: 'path/to/audio.mp3',
lang: "en"
})
```
@@ -348,6 +411,9 @@ result = client.yandex({
```
### CyberSiARA
+
+[API method description.](https://2captcha.com/2captcha-api#cybersiara)
+
Use this method to solve CyberSiARA and obtain a token to bypass the protection.
```ruby
result = client.cyber_siara({
@@ -357,8 +423,15 @@ result = client.cyber_siara({
```
### DataDome
+
+[API method description.](https://2captcha.com/2captcha-api#datadome)
+
Use this method to solve DataDome and obtain a token to bypass the protection.
-To solve the DataDome captcha, you must use a proxy.
+
+
+> [!IMPORTANT]
+> To solve the DataDome captcha, you must use a proxy. It is recommended to use [residential proxies].
+
```ruby
result = client.data_dome({
pageurl: "https://test.com",
@@ -369,6 +442,9 @@ result = client.data_dome({
```
### MTCaptcha
+
+[API method description.](https://2captcha.com/2captcha-api#mtcaptcha)
+
Use this method to solve MTCaptcha and obtain a token to bypass the protection.
```ruby
result = client.mt_captcha({
@@ -378,7 +454,14 @@ result = client.mt_captcha({
```
### Friendly captcha
+
+[API method description.](https://2captcha.com/2captcha-api#friendly-captcha)
+
Use this method to solve Friendly captcha and obtain a token to bypass the protection.
+
+> [!IMPORTANT]
+> To successfully use the received token, the captcha widget must not be loaded on the page. To do this, you need to abort request to `/friendlycaptcha/...module.min.js` on the page. When the captcha widget is already loaded on the page, there is a high probability that the received token will not work.
+
```ruby
result = client.friendly({
pageurl: "https://example.com",
@@ -387,6 +470,9 @@ result = client.friendly({
```
### Cutcaptcha
+
+[API method description.](https://2captcha.com/2captcha-api#cutcaptcha)
+
Use this method to solve Cutcaptcha and obtain a token to bypass the protection.
```ruby
result = client.cutcaptcha({
@@ -396,6 +482,31 @@ result = client.cutcaptcha({
})
```
+### Tencent
+
+[API method description.](https://2captcha.com/2captcha-api#tencent)
+
+Token-based method for automated solving of Tencent captcha.
+```ruby
+result = client.tencent({
+ app_id: "197326679",
+ pageurl: "https://mysite.com/page/with/tencent"
+})
+```
+
+### atbCAPTCHA
+
+[API method description.](https://2captcha.com/2captcha-api#atb-captcha)
+
+Token-based method for automated solving of atbCAPTCHA.
+```ruby
+result = client.atb_captcha({
+ app_id: "197326679",
+ api_server: "api.atb_captcha.com",
+ pageurl: "https://mysite.com/page/with/atb_captcha"
+})
+```
+
## Other methods
### send / get_result
@@ -422,6 +533,9 @@ result = client.get_result(captcha_id)
```
### balance
+
+[API method description.](https://2captcha.com/2captcha-api#additional-methods)
+
Use this method to get your account's balance
```ruby
@@ -429,6 +543,9 @@ balance = client.get_balance
```
### report
+
+[API method description.](https://2captcha.com/2captcha-api#complain)
+
Use this method to report good or bad captcha answer.
```ruby
client.report(captcha_id, True) # captcha solved correctly
@@ -471,6 +588,10 @@ In case of an error, the captcha solver throws an exception. It's important to p
end
```
+## Examples
+
+Examples of solving all supported captcha types are located in the [examples] directory.
+
## Get in touch
@@ -498,3 +619,5 @@ The graphics and trademarks included in this repository are not covered by the M
[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
+[examples]: ./examples/
+[residential proxies]: https://2captcha.com/proxy/residential-proxies
\ No newline at end of file
diff --git a/README.ru.md b/README.ru.md
index 1b5f340..4041eaf 100644
--- a/README.ru.md
+++ b/README.ru.md
@@ -7,46 +7,48 @@
-# Ruby 2Captcha API Client
+# Ruby 2Captcha API Client (captcha solver)
ΠΡΠΎ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π±ΡΡΡΡΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ [2Captcha] Π² Π²Π°Ρ ΠΊΠΎΠ΄ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΊΠ°ΠΏΡΠΈ.
ΠΡΠΈΠΌΠ΅ΡΡ API-Π·Π°ΠΏΡΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΠΈΠΏΠΎΠ² ΠΊΠ°ΠΏΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ [Ruby captcha solver](https://2captcha.com/lang/ruby).
-Ruby-ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄Π»Ρ API 2Captcha.
-
-- [Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°](#ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°)
-- [ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°](#Π½Π°ΡΡΡΠΎΠΉΠΊΠ°)
- - [ΠΠΏΡΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°](#ΠΎΠΏΡΠΈΠΈ-ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°)
-- [Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΏΡΠΈ](#ΡΠ΅ΡΠ΅Π½ΠΈΠ΅-ΠΊΠ°ΠΏΡΠΈ)
- - [ΠΠ±ΡΡΠ½Π°Ρ ΠΊΠ°ΠΏΡΠ°](#ΠΎΠ±ΡΡΠ½Π°Ρ-ΠΊΠ°ΠΏΡΠ°)
- - [Π’Π΅ΠΊΡΡΠΎΠ²Π°Ρ ΠΊΠ°ΠΏΡΠ°](#ΡΠ΅ΠΊΡΡΠΎΠ²Π°Ρ-ΠΊΠ°ΠΏΡΠ°)
- - [reCAPTCHA v2](#recaptcha-v2)
- - [reCAPTCHA v3](#recaptcha-v3)
- - [FunCaptcha](#funcaptcha)
- - [GeeTest](#geetest)
- - [hCaptcha](#hcaptcha)
- - [KeyCaptcha](#keycaptcha)
- - [Capy](#capy)
- - [Grid](#grid)
- - [Canvas](#canvas)
- - [ClickCaptcha](#clickcaptcha)
- - [Rotate](#rotate)
- - [AmazonWAF](#amazon-waf)
- - [CloudflareTurnstile](#cloudflare-turnstile)
- - [Lemin Cropped Captcha](#lemin-cropped-captcha)
- - [GeeTest V4](#geetest-v4)
- - [ΠΡΠ΄ΠΈΠΎ](#audio)
- - [CyberSiARA](#cybersiara)
- - [DataDome](#datadome)
- - [MTCaptcha](#mtcaptcha)
- - [Friendly captcha](#friendly-captcha)
- - [Cutcaptcha](#cutcaptcha)
-- [ΠΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ](#Π΄ΡΡΠ³ΠΈΠ΅-ΠΌΠ΅ΡΠΎΠ΄Ρ)
- - [send / get_result](#send--get_result)
- - [ΠΠ°Π»Π°Π½Ρ](#Π±Π°Π»Π°Π½Ρ)
- - [ΠΡΡΠ΅Ρ](#ΠΎΡΡΠ΅Ρ)
-- [ΠΡΠΎΠΊΡΠΈ](#ΠΏΡΠΎΠΊΡΠΈ)
-- [ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ](#ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°-ΠΎΡΠΈΠ±ΠΎΠΊ)
+- [Ruby 2Captcha API Client (captcha solver)](#ruby-2captcha-api-client-captcha-solver)
+ - [Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°](#ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°)
+ - [ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°](#Π½Π°ΡΡΡΠΎΠΉΠΊΠ°)
+ - [ΠΠΏΡΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°](#ΠΎΠΏΡΠΈΠΈ-ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°)
+ - [Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΏΡΠΈ](#ΡΠ΅ΡΠ΅Π½ΠΈΠ΅-ΠΊΠ°ΠΏΡΠΈ)
+ - [ΠΠ±ΡΡΠ½Π°Ρ ΠΊΠ°ΠΏΡΠ°](#ΠΎΠ±ΡΡΠ½Π°Ρ-ΠΊΠ°ΠΏΡΠ°)
+ - [Π’Π΅ΠΊΡΡΠΎΠ²Π°Ρ ΠΊΠ°ΠΏΡΠ°](#ΡΠ΅ΠΊΡΡΠΎΠ²Π°Ρ-ΠΊΠ°ΠΏΡΠ°)
+ - [reCAPTCHA v2](#recaptcha-v2)
+ - [reCAPTCHA v3](#recaptcha-v3)
+ - [FunCaptcha](#funcaptcha)
+ - [GeeTest](#geetest)
+ - [GeeTest V4](#geetest-v4)
+ - [hCaptcha](#hcaptcha)
+ - [KeyCaptcha](#keycaptcha)
+ - [Capy](#capy)
+ - [Grid](#grid)
+ - [Canvas](#canvas)
+ - [ClickCaptcha](#clickcaptcha)
+ - [Rotate](#rotate)
+ - [Amazon WAF](#amazon-waf)
+ - [Cloudflare Turnstile](#cloudflare-turnstile)
+ - [Lemin Cropped Captcha](#lemin-cropped-captcha)
+ - [Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ Π°ΡΠ΄ΠΈΠΎ](#ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅-Π°ΡΠ΄ΠΈΠΎ)
+ - [CyberSiARA](#cybersiara)
+ - [DataDome](#datadome)
+ - [MTCaptcha](#mtcaptcha)
+ - [Friendly captcha](#friendly-captcha)
+ - [Cutcaptcha](#cutcaptcha)
+ - [Tencent](#tencent)
+ - [atbCAPTCHA](#atbcaptcha)
+ - [ΠΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ](#Π΄ΡΡΠ³ΠΈΠ΅-ΠΌΠ΅ΡΠΎΠ΄Ρ)
+ - [send / get_result](#send--get_result)
+ - [ΠΠ°Π»Π°Π½Ρ](#Π±Π°Π»Π°Π½Ρ)
+ - [ΠΡΡΠ΅Ρ](#ΠΎΡΡΠ΅Ρ)
+ - [ΠΡΠΎΠΊΡΠΈ](#ΠΏΡΠΎΠΊΡΠΈ)
+ - [ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ](#ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°-ΠΎΡΠΈΠ±ΠΎΠΊ)
+ - [ΠΡΠΈΠΌΠ΅ΡΡ](#ΠΏΡΠΈΠΌΠ΅ΡΡ)
- [Π‘Π²ΡΠΆΠΈΡΠ΅ΡΡ Ρ Π½Π°ΠΌΠΈ](#ΡΠ²ΡΠΆΠΈΡΠ΅ΡΡ-Ρ-Π½Π°ΠΌΠΈ)
- [ΠΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡΠ΅ΡΡ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ πͺ](#join-the-team)
- [ΠΠΈΡΠ΅Π½Π·ΠΈΡ](#Π»ΠΈΡΠ΅Π½Π·ΠΈΡ)
@@ -76,7 +78,7 @@ gem install ruby-2captcha
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π³Π΅ΠΌΠ°.
-ΠΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Api2Captcha ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
+ΠΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° `Api2Captcha` ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
```ruby
require 'api_2captcha'
@@ -84,7 +86,7 @@ require 'api_2captcha'
client = Api2Captcha.new("YOUR_API_KEY")
```
### ΠΠΏΡΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
-Π£ Π²Π°Ρ ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Api2Captcha:
+Π£ Π²Π°Ρ ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° `Api2Captcha`:
```ruby
client.soft_id(123)
@@ -94,28 +96,34 @@ client.default_timeout(120)
client.polling_interval(10)
```
-**ΠΠΠΠΠ**: ΠΏΠΎΡΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Π΄Π»Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° , Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΠ°ΠΏΡΠΈ ΠΈ ΠΠ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Ρ API. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ Π½Π° URL ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ²Π΅Ρ Π²ΡΡΡΠ½ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ get_result.
+> [!IMPORTANT]
+> ΠΠΎΡΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Π΄Π»Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΠ°ΠΏΡΠΈ ΠΈ ΠΠ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Ρ API. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ Π½Π° URL ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°.
+
+Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ²Π΅Ρ Π²ΡΡΡΠ½ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ [get_result](#send--get_result).
## Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΏΡΠΈ
-ΠΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π»ΡΠ±ΠΎΠΉ ΠΊΠ°ΠΏΡΠΈ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠ°ΠΌ 2Captcha ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π΅Π΅ ΡΠ΅ΡΠΈΡΡ.
+ΠΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π»ΡΠ±ΠΎΠΉ ΠΊΠ°ΠΏΡΠΈ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠ°ΠΌ 2Captcha ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π΅Ρ ΡΠ΅ΡΠΈΡΡ.
### ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠ°ΠΏΡΠΈ
-| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
-|-------------------|---------------|-------------------------------------------------------------------------------------------------------------------------------|
-| numeric | 0 | ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΠΊΠ°ΠΏΡΠ° ΡΠΈΡΠ»Π° ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ [ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ API](https://2captcha.com/2captcha-api#solving_normal_captcha) |
-| min_len | 0 | ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΠΎΡΠ²Π΅ΡΠ° length |
-| max_len | 0 | ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΠΎΡΠ²Π΅ΡΠ° length |
-| phrase | 0 | ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΠΎΡΠ²Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠ² ΠΈΠ»ΠΈ Π½Π΅Ρ |
-| case_sensitive | 0 | ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ Π»ΠΈ ΡΠ΅Π³ΠΈΡΡΡ Π² ΠΎΡΠ²Π΅ΡΠ΅ |
-| calc | 0 | ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π»ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΊΠ°ΠΏΡΠΈ |
+| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
+|-------------------|---------------|--------------------------------------------------------------------------------------------------------------------|
+| numeric | 0 | ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΠΊΠ°ΠΏΡΠ° ΡΠΈΡΠ»Π° ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ [ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ API](https://2captcha.com/2captcha-api#solving_normal_captcha) |
+| min_len | 0 | ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΠΎΡΠ²Π΅ΡΠ° length |
+| max_len | 0 | ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΠΎΡΠ²Π΅ΡΠ° length |
+| phrase | 0 | ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΠΎΡΠ²Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠ² ΠΈΠ»ΠΈ Π½Π΅Ρ |
+| case_sensitive | 0 | ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ Π»ΠΈ ΡΠ΅Π³ΠΈΡΡΡ Π² ΠΎΡΠ²Π΅ΡΠ΅ |
+| calc | 0 | ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π»ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΊΠ°ΠΏΡΠΈ |
| lang | - | ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ·ΡΠΊ ΠΊΠ°ΠΏΡΠΈ, ΡΠΌ. [ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
ΡΠ·ΡΠΊΠΎΠ²](https://2captcha.com/2captcha-api#language) |
-| hint_image | - | ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΎΠΉ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠ°ΠΌ Ρ ΠΊΠ°ΠΏΡΠ΅ΠΉ, ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° API instructionsimg |
-| hint_text | - | ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡ Π·Π°Π΄Π°Π½ΠΈΡ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠ°ΠΌ Ρ ΠΊΠ°ΠΏΡΠ΅ΠΉ |
+| hint_image | - | ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΎΠΉ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠ°ΠΌ Ρ ΠΊΠ°ΠΏΡΠ΅ΠΉ, ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° API instructionsimg |
+| hint_text | - | ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡ Π·Π°Π΄Π°Π½ΠΈΡ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠ°ΠΌ Ρ ΠΊΠ°ΠΏΡΠ΅ΠΉ |
ΠΠΈΠΆΠ΅ Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΊΠ°ΠΏΡΠΈ. ΠΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π½ΠΈΠΆΠ΅.
### ΠΠ±ΡΡΠ½Π°Ρ ΠΊΠ°ΠΏΡΠ°
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#solving_normal_captcha)
+
ΠΠ»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΊΠ°ΠΏΡΠΈ (ΠΈΡΠΊΠ°ΠΆΠ΅Π½Π½ΡΠΉ ΡΠ΅ΠΊΡΡ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅.
```ruby
@@ -125,8 +133,11 @@ result = client.normal({
image: 'https://site-with-captcha.com/path/to/captcha.jpg'
})
```
+
### Π’Π΅ΠΊΡΡΠΎΠ²Π°Ρ ΠΊΠ°ΠΏΡΠ°
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#solving_text_captcha)
+
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° ΠΊΠ°ΠΏΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π² ΡΠ²Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.
```ruby
@@ -137,6 +148,9 @@ result = client.text({
```
### reCAPTCHA v2
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#solving_recaptchav2_new)
+
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ reCAPTCHA v2 ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½Π° Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° Π·Π°ΡΠΈΡΡ.
```ruby
@@ -148,6 +162,9 @@ result = client.recaptcha_v2({
```
### reCAPTCHA v3
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#solving_recaptchav3)
+
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ reCAPTCHA v3 ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΊΠ΅Π½.
```ruby
@@ -161,6 +178,9 @@ result = client.recaptcha_v3({
```
### FunCaptcha
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#solving_funcaptcha_new)
+
ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ FunCaptcha (Arkoselabs). ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΊΠ΅Π½.
```ruby
@@ -171,6 +191,9 @@ result = client.funcaptcha({
```
### GeeTest
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#solving_geetest)
+
ΠΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΠΈ GeeTest captcha. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°Π±ΠΎΡ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON.
```ruby
@@ -182,7 +205,23 @@ result = client.geetest({
})
```
+### GeeTest v4
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#geetest-v4)
+
+ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ GeeTest v4. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠ²Π΅Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON.
+
+```ruby
+result = client.geetest_v4({
+ captcha_id: 'e392e1d7fd421dc63325744d5a2b9c73',
+ pageurl: 'https://www.site.com/page/'
+})
+```
+
### hCaptcha
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#solving_hcaptcha)
+
ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ hCaptcha. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΊΠ΅Π½ Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° ΠΊΠ°ΠΏΡΠΈ.
```ruby
@@ -193,6 +232,9 @@ result = client.hcaptcha({
```
### KeyCaptcha
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#solving_keycaptcha)
+
ΠΠ΅ΡΠΎΠ΄ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ KeyCaptcha.
```ruby
@@ -206,6 +248,9 @@ result = client.keycaptcha({
```
### Capy
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#solving_capy)
+
ΠΠ΅ΡΠΎΠ΄ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° ΠΏΠ°Π·Π·Π»Π° Capy.
```ruby
@@ -217,6 +262,9 @@ result = client.capy({
```
### Grid
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#grid)
+
ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠΊΠΈ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Old ReCaptcha V2. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΊΠ°ΠΏΡΠΈ, Π³Π΄Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΡΠΊΡ ΠΊ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ»ΠΈΠΊΠ½ΡΡΡ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΡΠ΅ΠΉΠΊΠ°ΠΌ ΡΠ΅ΡΠΊΠΈ. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ
ΡΡΠ΅Π΅ΠΊ.
```ruby
@@ -232,6 +280,9 @@ result = client.grid({
```
### Canvas
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#canvas)
+
ΠΠ΅ΡΠΎΠ΄ Canvas ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΈΠ½ΠΈΡ Π²ΠΎΠΊΡΡΠ³ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°Π±ΠΎΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΡΠΎΡΠ΅ΠΊ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°.
```ruby
@@ -245,6 +296,9 @@ result = client.canvas({
```
### ClickCaptcha
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#coordinates)
+
ΠΠ΅ΡΠΎΠ΄ ClickCaptcha Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠ΅ΠΊ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΊΠ°ΠΏΡΠΈ. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ»ΠΈΠΊΠ½ΡΡΡ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΠΎΡΠΊΠ°ΠΌ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ.
```ruby
@@ -257,6 +311,9 @@ result = client.coordinates({
```
### Rotate
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#solving_rotatecaptcha)
+
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΏΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΡΠΈΡ ΠΏΠΎΠ²Π΅ΡΠ½ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ. Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° FunCaptcha. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡΠΎΡΠ°.
```ruby
@@ -271,7 +328,10 @@ result = client.rotate({
### Lemin Cropped Captcha
-ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Π½ΠΈΡ hCaptcha. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ JSON-ΠΎΡΠ²Π΅Ρ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ: ΠΎΡΠ²Π΅Ρ (answer) ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π·Π°Π΄Π°Π½ΠΈΡ (challenge_id).
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#lemin)
+
+ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Π½ΠΈΡ Lemin. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ JSON-ΠΎΡΠ²Π΅Ρ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ: ΠΎΡΠ²Π΅Ρ (answer) ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π·Π°Π΄Π°Π½ΠΈΡ (challenge_id).
```ruby
result = client.lemin({
@@ -284,6 +344,9 @@ result = client.lemin({
### Cloudflare Turnstile
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#turnstile)
+
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ Cloudflare Turnstile. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ JSON Ρ ΡΠΎΠΊΠ΅Π½ΠΎΠΌ.
```ruby
@@ -294,6 +357,9 @@ result = client.turnstile({
```
### Amazon WAF
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#amazon-waf)
+
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Captcha Amazon WAF, ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ AWS WAF Captcha, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°ΡΠΈΡΡ ΠΎΡ ΡΠ³ΡΠΎΠ· Π΄Π»Ρ Amazon AWS. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ JSON Ρ ΡΠΎΠΊΠ΅Π½ΠΎΠΌ.
```ruby
@@ -307,27 +373,25 @@ result = client.amazon_waf({
})
```
-### GeeTest v4
-ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ GeeTest v4. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠ²Π΅Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON.
+### Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ Π°ΡΠ΄ΠΈΠΎ
-```ruby
-result = client.geetest_v4({
- captcha_id: 'e392e1d7fd421dc63325744d5a2b9c73',
- pageurl: 'https://www.site.com/page/'
-})
-```
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#audio)
+
+ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π°ΡΠ΄ΠΈΠΎ ΠΊΠ°ΠΏΡΠΈ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ Π°ΡΠ΄ΠΈΠΎΠ·Π°ΠΏΠΈΡΠΈ.
-### Audio
-ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π°ΡΠ΄ΠΈΠΎ-ΠΊΠ°ΠΏΡΠΈ.
+ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ·ΡΠΊΠΈ: "en", "ru", "de", "el", "pt", "fr".
```ruby
result = client.audio({
- audio: 'path/to/audio.jpg',
+ audio: 'path/to/audio.mp3',
lang: "en"
})
```
### CyberSiARA
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#cybersiara)
+
ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ CyberSiARA. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΊΠ΅Π½ Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° ΠΊΠ°ΠΏΡΠΈ.
```ruby
@@ -338,8 +402,13 @@ result = client.cyber_siara({
```
### DataDome
-ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ DataDome Π²Π΅ΡΠ½Π΅Ρ ΡΠΎΠΊΠ΅Π½ Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° ΠΊΠ°ΠΏΡΠΈ.
-Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΠΊΠ°ΠΏΡΡ DataDome Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΊΡΠΈ.
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#datadome)
+
+ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ DataDome Π²Π΅ΡΠ½Π΅Ρ `cookies` Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° ΠΊΠ°ΠΏΡΠΈ.
+
+> [!IMPORTANT]
+> Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΠΊΠ°ΠΏΡΡ DataDome Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΊΡΠΈ. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ [ΡΠ΅Π·ΠΈΠ΄Π΅Π½ΡΠ½ΡΠ΅ ΠΏΡΠΎΠΊΡΠΈ].
```ruby
result = client.data_dome({
@@ -352,6 +421,9 @@ result = client.data_dome({
### MTCaptcha
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#mtcaptcha)
+
ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ MTCaptcha. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΊΠ΅Π½ Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° ΠΊΠ°ΠΏΡΠΈ.
```ruby
@@ -363,8 +435,14 @@ result = client.mt_captcha({
### Friendly captcha
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#friendly-captcha)
+
ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ Friendly captcha. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΊΠ΅Π½ Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° ΠΊΠ°ΠΏΡΠΈ.
+> [!IMPORTANT]
+> Π§ΡΠΎΠ±Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Π½, Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΊΠ°ΠΏΡΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅ΡΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡ ΠΊ `/friendlycaptcha/...module.min.js` Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅. ΠΡΠ»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΊΠ°ΠΏΡΠΈ ΡΠΆΠ΅ Π·Π°Π³ΡΡΠΆΠ΅Π½ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΡΡΠΎΠΊΠ°Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Π½ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
+
```ruby
result = client.friendly({
pageurl: "https://example.com",
@@ -372,8 +450,10 @@ result = client.friendly({
})
```
-
### Cutcaptcha
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#cutcaptcha)
+
ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ Cutcaptcha. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΊΠ΅Π½ Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° ΠΊΠ°ΠΏΡΠΈ.
```ruby
@@ -384,6 +464,31 @@ result = client.cutcaptcha({
})
```
+### Tencent
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#tencent)
+
+ΠΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° ΡΠΎΠΊΠ΅Π½Π°Ρ
ΠΌΠ΅ΡΠΎΠ΄ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΏΡΠΈ Tencent.
+```ruby
+result = client.tencent({
+ app_id: "197326679",
+ pageurl: "https://mysite.com/page/with/tencent"
+})
+```
+
+### atbCAPTCHA
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#atb-captcha)
+
+ΠΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° ΡΠΎΠΊΠ΅Π½Π°Ρ
ΠΌΠ΅ΡΠΎΠ΄ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΏΡΠΈ atbCAPTCHA.
+```ruby
+result = client.atb_captcha({
+ app_id: "197326679",
+ api_server: "api.atb_captcha.com",
+ pageurl: "https://mysite.com/page/with/atb_captcha"
+})
+```
+
## ΠΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ
@@ -409,6 +514,9 @@ time.sleep(20)
result = client.get_result(captcha_id)
```
### ΠΠ°Π»Π°Π½Ρ
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#additional-methods)
+
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π±Π°Π»Π°Π½Ρ Π² Π²Π°ΡΠ΅ΠΌ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ΅.
```ruby
@@ -416,6 +524,9 @@ balance = client.get_balance
```
### ΠΡΡΠ΅Ρ
+
+[ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° API.](https://2captcha.com/2captcha-api#complain)
+
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΎΡΡΠ΅ΡΠ° ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ΅ Π½Π° ΠΊΠ°ΠΏΡΡ.
```ruby
@@ -462,6 +573,10 @@ result = client.recaptcha_v2({
end
```
+## ΠΡΠΈΠΌΠ΅ΡΡ
+
+ΠΡΠΈΠΌΠ΅ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
ΡΠΈΠΏΠΎΠ² ΠΊΠ°ΠΏΡΠΈ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ [examples].
+
## Π‘Π²ΡΠΆΠΈΡΠ΅ΡΡ Ρ Π½Π°ΠΌΠΈ
@@ -484,4 +599,6 @@ result = client.recaptcha_v2({
[2Captcha]: https://2captcha.com/
[ΠΡΠΏΠΈΡΡ ΡΠ΅Π·ΠΈΠ΄Π΅Π½ΡΡΠΊΠΈΠ΅ ΠΏΡΠΎΠΊΡΠΈ]: https://2captcha.com/proxy/residential-proxies
-[ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ]: https://2captcha.com/proxy?openAddTrafficModal=true
\ No newline at end of file
+[ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ]: https://2captcha.com/proxy?openAddTrafficModal=true
+[ΡΠ΅Π·ΠΈΠ΄Π΅Π½ΡΠ½ΡΠ΅ ΠΏΡΠΎΠΊΡΠΈ]: https://2captcha.com/proxy/residential-proxies
+[examples]: ./examples/
\ No newline at end of file
diff --git a/api_2captcha.gemspec b/api_2captcha.gemspec
index 564302f..ac762e7 100644
--- a/api_2captcha.gemspec
+++ b/api_2captcha.gemspec
@@ -18,6 +18,12 @@ Gem::Specification.new do |spec|
spec.metadata["source_code_uri"] = "https://github.com/2captcha/2captcha-ruby"
spec.metadata["changelog_uri"] = "https://github.com/2captcha/2captcha-ruby/releases"
spec.metadata["github_repo"] = "ssh://github.com/2captcha/2captcha-ruby"
+ spec.metadata["bug_tracker_uri"] = "https://github.com/2captcha/2captcha-ruby/issues"
+ spec.metadata["keywords"] = [
+ '2captcha', 'captcha solver', 'captcha bypass', 'Ruby', 'automation',
+ 'CAPTCHA API', 'CAPTCHA recognition', 'anti-captcha', 'reCAPTCHA', 'OCR',
+ 'image recognition', 'human verification', 'bot protection', 'recaptcha'
+ ]
# Specify which files should be added to the gem when it is released.
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
diff --git a/examples/atb_captcha_example.rb b/examples/atb_captcha_example.rb
new file mode 100644
index 0000000..725ede9
--- /dev/null
+++ b/examples/atb_captcha_example.rb
@@ -0,0 +1,11 @@
+require 'api_2captcha'
+
+client = Api2Captcha.new("YOUR_API_KEY")
+
+result = client.atb_captcha({
+ app_id: "197326679",
+ api_server: "api.atb_captcha.com",
+ pageurl: "https://mysite.com/page/with/atb_captcha"
+})
+
+puts "Result: #{result.inspect}"
\ No newline at end of file
diff --git a/examples/audio_example.rb b/examples/audio_example.rb
new file mode 100644
index 0000000..1a7b103
--- /dev/null
+++ b/examples/audio_example.rb
@@ -0,0 +1,10 @@
+require 'api_2captcha'
+
+client = Api2Captcha.new("YOUR_API_KEY")
+
+result = client.audio({
+ audio: './media/example.mp3',
+ lang: "en"
+})
+
+puts "Result: #{result.inspect}"
\ No newline at end of file
diff --git a/examples/grid_captcha_example.rb b/examples/grid_captcha_example.rb
new file mode 100644
index 0000000..20c2646
--- /dev/null
+++ b/examples/grid_captcha_example.rb
@@ -0,0 +1,14 @@
+require 'api_2captcha'
+
+client = Api2Captcha.new("YOUR_API_KEY")
+
+result = client.grid({
+ image: './media/recaptchaGrid4x4.jpg',
+ rows: 4,
+ cols: 4,
+ lang: 'en',
+ hint_image: './media/recaptchaGridImginstructions4x4.jpg',
+ # hint_text: 'Select all squares with stairs'
+})
+
+puts "Result: #{result.inspect}"
\ No newline at end of file
diff --git a/examples/media/example.mp3 b/examples/media/example.mp3
new file mode 100644
index 0000000..c063a6a
Binary files /dev/null and b/examples/media/example.mp3 differ
diff --git a/examples/media/normal_2.jpg b/examples/media/normal_2.jpg
new file mode 100644
index 0000000..a1f5035
Binary files /dev/null and b/examples/media/normal_2.jpg differ
diff --git a/examples/media/recaptchaGrid4x4.jpg b/examples/media/recaptchaGrid4x4.jpg
new file mode 100644
index 0000000..05aa85c
Binary files /dev/null and b/examples/media/recaptchaGrid4x4.jpg differ
diff --git a/examples/media/recaptchaGridImginstructions4x4.jpg b/examples/media/recaptchaGridImginstructions4x4.jpg
new file mode 100644
index 0000000..6c99556
Binary files /dev/null and b/examples/media/recaptchaGridImginstructions4x4.jpg differ
diff --git a/examples/normal_captcha_example.rb b/examples/normal_captcha_example.rb
new file mode 100644
index 0000000..ee3a816
--- /dev/null
+++ b/examples/normal_captcha_example.rb
@@ -0,0 +1,9 @@
+require 'api_2captcha'
+
+client = Api2Captcha.new("YOUR_API_KEY")
+
+result = client.normal({
+ image: './media/normal_2.jpg',
+})
+
+puts "Result: #{result.inspect}"
\ No newline at end of file
diff --git a/examples/recaptcha_v2_example.rb b/examples/recaptcha_v2_example.rb
new file mode 100644
index 0000000..fe1838d
--- /dev/null
+++ b/examples/recaptcha_v2_example.rb
@@ -0,0 +1,10 @@
+require 'api_2captcha'
+
+client = Api2Captcha.new("YOUR_API_KEY")
+
+result = client.recaptcha_v2({
+ googlekey: '6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u',
+ pageurl: 'https://2captcha.com/demo/recaptcha-v2',
+})
+
+puts "Result: #{result.inspect}"
\ No newline at end of file
diff --git a/examples/tencent_example.rb b/examples/tencent_example.rb
new file mode 100644
index 0000000..d46a489
--- /dev/null
+++ b/examples/tencent_example.rb
@@ -0,0 +1,10 @@
+require 'api_2captcha'
+
+client = Api2Captcha.new("YOUR_API_KEY")
+
+result = client.tencent({
+ app_id: "197326679",
+ pageurl: "https://mysite.com/page/with/tencent"
+})
+
+puts "Result: #{result.inspect}"
\ No newline at end of file
diff --git a/lib/api_2captcha/client.rb b/lib/api_2captcha/client.rb
index d3a03a0..a8e624b 100644
--- a/lib/api_2captcha/client.rb
+++ b/lib/api_2captcha/client.rb
@@ -171,7 +171,7 @@ def amazon_waf(params)
end
def audio(params)
- audio = params.delete("audio")
+ audio = params.delete(:audio)
audio_content = File.file?(audio) ? File.binread(audio) : audio
params = params.merge(
@@ -205,6 +205,14 @@ def cutcaptcha(params)
solve("cutcaptcha", **params)
end
+ def tencent(params)
+ solve("tencent", **params)
+ end
+
+ def atb_captcha(params)
+ solve("atb_captcha", **params)
+ end
+
private
def base_url