rucaptcha-client
Π£Π΄ΠΎΠ±Π½Π°Ρ PHP-ΠΎΠ±ΡΡΡΠΊΠ° Π΄Π»Ρ ΡΠ΅ΡΠ²ΠΈΡΠ° ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΊΠ°ΠΏΡΠΈ rucaptcha.com.
ΠΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅., (*1)
, (*2)
Install
$ composer require --prefer-dist gladyshev/rucaptcha-client "*"
or, (*3)
"require": {
...
"gladyshev/rucaptcha-client": "*"
...
}
Examples
ΠΠΎΠ»ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π² ΠΏΠ°ΠΏΠΊΠ΅ examples., (*4)
/* Simple */
$rucaptcha = new Rucaptcha\Client('YOUR_API_KEY');
$captchaText = $rucaptcha->recognizeFile('captcha.png');
print_r($captchaText); // h54g6
```php
/* Advanced example */, (*5)
$rucaptcha = new Rucaptcha\Client('YOUR_API_KEY', [
'verbose' => true,
'httpClient' => new \GuzzleHttp\Client(['base_uri' => 'https://2captcha.com']),
'logger' => new \Monolog\Logger('2Captcha', [new StreamHandler('php://stdout')])
]);, (*6)
$taskIds = [];, (*7)
$taskIds[] = $rucaptcha->sendCaptcha(file_get_contents('captcha1.png'));
$taskIds[] = $rucaptcha->sendCaptcha(file_get_contents('captcha2.jpg'));
$taskIds[] = $rucaptcha->sendCaptcha(file_get_contents('captcha3.gif'), [
Rucaptcha\Extra::NUMERIC => 1
]);, (*8)
$results = [];, (*9)
while (count($taskIds) > 0)
{
// Try get results
foreach ($taskIds as $i=>$taskId)
{
// Wait 5 sec
sleep(5);, (*10)
$results[$taskId] = $rucaptcha->getCaptchaResult($taskId);
// false === is not ready, on error we've got an exception
if ($results[$taskId] === false) {
continue;
} else {
unset($taskIds[$i]);
}
}
}, (*11)
print_r($results);, (*12)
### Methods of `Rucaptcha\Client`
```php
use Rucaptcha\Client;
/* Constructor */
Client::__construct($apiKey, array $options = []): void;
/* Configuration */
Client::setOptions(array $options): void;
// Guzzle PSR-18 HTTP-client
Client::setHttpClient(Psr\Http\Client\ClientInterface $client): void;
// PSR-3 logger
Client::setLogger(Psr\Log\LoggerInterface $logger): void;
/* Solving captcha methods */
Client::recognize(string $content, array $extra = []): string;
Client::recognizeFile(string $path, array $extra = []): string;
Client::sendCaptcha(string $content, array $extra = []): int;
Client::getCaptchaResult(int $captchaId): string;
Client::getCaptchaResultBulk(array $captchaIds): array;
/* Pingback stuff */
Client::addPingback(string $uri): bool;
Client::getPingbacks(): array;
Client::deletePingback(string $uri): bool;
Client::deleteAllPingbacks(): bool;
/* Google Recaptcha V2 */
Client::sendRecapthaV2($googleKey, $pageUrl, $extra = []): int
Client::recognizeRecapthaV2($googleKey, $pageUrl, $extra = []): string
/* Other */
Client::getLastCaptchaId(): string;
Client::getBalance(): string;
Client::reportGood(string $captchaId): bool;
Client::reportBad(string $captchaId): bool;
Client options
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ |
Π’ΠΈΠΏ |
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ |
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ |
verbose |
bool |
false |
ΠΠΊΠ»ΡΡΠ°Π΅Ρ/ΠΎΡΠΊΠ»ΡΡΠ°Π΅Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ |
apiKey |
string |
'' |
ΠΠ»ΡΡ API Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ²ΠΈΡ |
rTimeout |
integer |
5 |
ΠΠ΅ΡΠΈΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠΏΡΠΎΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π²Π΅ΡΠ° ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ |
mTimeout |
integer |
120 |
Π’Π°ΠΉΠΌΠ°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠ° ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ |
serverBaseUri |
string |
'http://rucaptcha.com' |
ΠΠ°Π·ΠΎΠ²ΡΠΉ URI ΡΠ΅ΡΠ²ΠΈΡΠ° |
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ |
Π’ΠΈΠΏ |
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ |
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ |
phrase |
integer |
0 |
0 = ΠΎΠ΄Π½ΠΎ ΡΠ»ΠΎΠ²ΠΎ 1 = ΠΊΠ°ΠΏΡΠ° ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° ΡΠ»ΠΎΠ²Π° |
regsense |
integer |
0 |
0 = ΡΠ΅Π³ΠΈΡΡΡ ΠΎΡΠ²Π΅ΡΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 1 = ΡΠ΅Π³ΠΈΡΡΡ ΠΎΡΠ²Π΅ΡΠ° ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ |
question |
integer |
0 |
0 = ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ 1 = Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Π½ Π²ΠΎΠΏΡΠΎΡ, ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΡΠ²Π΅Ρ |
numeric |
integer |
0 |
0 = ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ 1 = ΠΊΠ°ΠΏΡΠ° ΡΠΎΡΡΠΎΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΡΠΈΡΡ 2 = ΠΠ°ΠΏΡΠ° ΡΠΎΡΡΠΎΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π±ΡΠΊΠ² 3 = ΠΠ°ΠΏΡΠ° ΡΠΎΡΡΠΎΠΈΡ Π»ΠΈΠ±ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΡΠΈΡΡ, Π»ΠΈΠ±ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π±ΡΠΊΠ². |
calc |
integer |
0 |
0 = ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ 1 = ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΡ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ²Π΅ΡΡΠΈΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΊΠ°ΠΏΡΠΈ |
min_len |
0..20 |
0 |
0 = ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ 1..20 = ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π½Π°ΠΊΠΎΠ² Π² ΠΎΡΠ²Π΅ΡΠ΅ |
max_len |
1..20 |
0 |
0 = ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ 1..20 = ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π½Π°ΠΊΠΎΠ² Π² ΠΎΡΠ²Π΅ΡΠ΅ |
is_russian |
integer |
0 |
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Ρ.ΠΊ. ΠΎΠ½ ΠΎΠ·Π½Π°ΡΠ°Π» "ΡΠ»Π°ΡΡ Π΄Π°Π½Π½ΡΡ ΠΊΠ°ΠΏΡΡ ΡΡΡΡΠΊΠΈΠΌ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠΌ", Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΠΈ. Π‘ΠΌΠΎΡΡΠΈΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ language, ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ ΡΠ·ΡΠΊ ΠΊΠ°ΠΏΡΠΈ |
soft_id |
string |
ID ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ 10% ΠΎΡ Π²ΡΠ΅Ρ
ΠΊΠ°ΠΏΡ, ΠΏΡΠΈΡΠ΅Π΄ΡΠΈΡ
ΠΈΠ· Π΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. |
language |
integer |
0 |
0 = ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ 1 = Π½Π° ΠΊΠ°ΠΏΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΡΠΊΠ²Ρ 2 = Π½Π° ΠΊΠ°ΠΏΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π»Π°ΡΠΈΠ½ΡΠΊΠΈΠ΅ Π±ΡΠΊΠ²Ρ |
lang |
string |
ΠΠΎΠ΄ ΡΠ·ΡΠΊΠ°. Π‘ΠΌ. ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
ΡΠ·ΡΠΊΠΎΠ². |
header_acao |
integer |
0 |
0 = Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 1 = in.php ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Access-Control-Allow-Origin: * ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΎΡΠ²Π΅ΡΠ°. (ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΠΊΡΠΎΡΡ-Π΄ΠΎΠΌΠ΅Π½Π½ΡΡ
AJAX Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
. Π Π°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ res.php.) |
textinstructions |
string |
Π’Π΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΡ. ΠΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π² ΡΠ΅Π±Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ ΡΠ°Π·Π³Π°Π΄ΠΊΠ΅ ΠΊΠ°ΠΏΡΠΈ. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ - 140 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π’Π΅ΠΊΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π°ΡΡ Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ UTF-8. |
textcaptcha |
string |
Π’Π΅ΠΊΡΡΠΎΠ²Π°Ρ ΠΊΠ°ΠΏΡΠ°. ΠΠ°ΡΡΠΈΠ½ΠΊΠ° ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ, ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΡ ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ ΠΎΡΠ²Π΅Ρ Π½Π° ΡΡΠΎΡ ΡΠ΅ΠΊΡΡ. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ - 140 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π’Π΅ΠΊΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π°ΡΡ Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ UTF-8. |
pingback |
string |
URL Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΎΡΠ²Π΅ΡΠ° Π½Π° ΠΊΠ°ΠΏΡΡ (callback). URL Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅. ΠΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π΄Π΅ΡΡ. |
recaptcha |
string |
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ ΡΡΠ°ΡΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ ΡΠ°ΡΠΏΠΎΠ·Π½ΠΎΠ²Π°Π½ΠΈΡ Google Recaptcha V2. ΠΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π΄Π΅ΡΡ. |
proxy |
string |
Π€ΠΎΡΠΌΠ°Ρ: Π»ΠΎΠ³ΠΈΠ½:ΠΏΠ°ΡΠΎΠ»Ρ@123.123.123.123:3128 ΠΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΡΠΎΠΊΡΠΈ Π·Π΄Π΅ΡΡ.
|
proxytype |
string |
Π’ΠΈΠΏ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠΊΡΠΈ-ΡΠ΅ΡΠ²Π΅ΡΠ°: HTTP, HTTPS, SOCKS4, SOCKS5. |