carlite/2captcha

PHP包,用于轻松集成2captcha API

dev-main 2022-11-22 02:23 UTC

This package is auto-updated.

Last update: 2024-09-22 06:12:41 UTC


README

将2Captcha验证码解决服务快速集成到代码中的最简单方法,以自动化解决任何类型的验证码。

安装

该包可以通过Composer或手动安装

Composer

composer require carlite/2captcha

手动

src目录复制到您的项目中,然后在需要的地方require自动加载器(src/autoloader.php

require 'path/to/autoloader.php';

配置

可以这样创建TwoCaptcha实例

$solver = new \TwoCaptcha\TwoCaptcha('YOUR_API_KEY');

还有一些可以配置的选项

$solver = new \TwoCaptcha\TwoCaptcha([
    'server'           => 'http://rucaptcha.com',
    'apiKey'           => 'YOUR_API_KEY',
    'softId'           => 123,
    'callback'         => 'https://your.site/result-receiver',
    'defaultTimeout'   => 120,
    'recaptchaTimeout' => 600,
    'pollingInterval'  => 10,
]);

TwoCaptcha实例选项

重要:一旦为TwoCaptcha实例定义了callback,所有方法都只返回验证码ID,不会轮询API获取结果。结果将被发送到回调URL。要手动获取结果,请使用getResult方法

解决验证码

当提交任何基于图像的验证码时,您可以提供附加选项以帮助2captcha工作者正确解决它。

验证码选项

以下可以找到每种验证码类型的基本示例。查看示例目录以获取更多示例,其中包含所有可用选项。

普通验证码

要绕过普通验证码(图像上的扭曲文本),请使用以下方法。此方法还可以用于识别图像上的任何文本。

$result = $solver->normal('path/to/captcha.jpg');

文本验证码

此方法可以用于绕过需要回答清晰文本中提供的问题的验证码。

$result = $solver->text('If tomorrow is Saturday, what day is today?');

ReCaptcha v2

使用此方法解决ReCaptcha V2并获取一个令牌以绕过保护。

$result = $solver->recaptcha([
    'sitekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
    'url'     => 'https://mysite.com/page/with/recaptcha',
]);

ReCaptcha v3

此方法提供ReCaptcha V3解决器并返回一个令牌。

$result = $solver->recaptcha([
    'sitekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
    'url'     => 'https://mysite.com/page/with/recaptcha',
    'version' => 'v3',
]);

FunCaptcha

FunCaptcha (Arkoselabs)解决方法。返回一个令牌。

$result = $solver->funcaptcha([
    'sitekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
    'url'     => 'https://mysite.com/page/with/funcaptcha',
]);

GeeTest

解决GeeTest拼图验证码的方法。返回一组JSON令牌。

$result = $solver->geetest([
    'gt'        => 'f1ab2cdefa3456789012345b6c78d90e',
    'challenge' => '12345678abc90123d45678ef90123a456b',
    'url'       => 'https://www.site.com/page/',
]);

hCaptcha

使用此方法解决hCaptcha挑战。返回一个令牌以绕过验证码。

$result = $solver->hcaptcha([
    'sitekey'   => '10000000-ffff-ffff-ffff-000000000001',
    'url'       => 'https://www.site.com/page/',
]);

KeyCaptcha

基于令牌的解决KeyCaptcha的方法。

$result = $solver->keycaptcha([
    's_s_c_user_id'          => 10,
    's_s_c_session_id'       => '493e52c37c10c2bcdf4a00cbc9ccd1e8',
    's_s_c_web_server_sign'  => '9006dc725760858e4c0715b835472f22-pz-',
    's_s_c_web_server_sign2' => '2ca3abe86d90c6142d5571db98af6714',
    'url'                    => 'https://www.keycaptcha.ru/demo-magnetic/',
]);

Capy

基于令牌的绕过Capy拼图验证码的方法。

$result = $solver->capy([
    'sitekey' => 'PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v',
    'url'     => 'http://mysite.com/',
    'api_server' => 'https://jp.api.capy.me/',
]);

网格

网格方法最初称为旧ReCaptcha V2方法。该方法可以用于绕过任何类型的验证码,其中您可以在图像上应用网格并需要点击特定的网格框。返回框数。

$result = $solver->grid('path/to/captcha.jpg');

Canvas

Canvas方法可以在您需要围绕图像上的对象绘制线条时使用。返回绘制多边形的点的坐标集。

$result = $solver->canvas('path/to/captcha.jpg');

ClickCaptcha

ClickCaptcha方法返回验证码图像上点的坐标。如果需要点击图像上的特定点,则可以使用。

$result = $solver->coordinates('path/to/captcha.jpg');

旋转

此方法可以用于解决要求旋转对象的验证码。主要用于绕过FunCaptcha。返回旋转角度。

$result = $solver->rotate('path/to/captcha.jpg');

其他方法

send / getResult

这些方法可用于手动提交验证码和轮询答案。

$id = $solver->send(['file' => 'path/to/captcha.jpg', ...]);

sleep(20);

$code = $solver->getResult($id);

balance

使用此方法获取您的账户余额

$balance = $solver->balance();

report

使用此方法报告好或坏的验证码答案。

$solver->report($id, true); // captcha solved correctly
$solver->report($id, false); // captcha solved incorrectly

错误处理

如果错误发生时,验证码解决器抛出异常。正确处理这些情况非常重要。我们建议使用try catch来处理异常。

try {
    $result = $solver->text('If tomorrow is Saturday, what day is today?');
} catch (\TwoCaptcha\Exception\ValidationException $e) {
    // invalid parameters passed
} catch (\TwoCaptcha\Exception\NetworkException $e) {
    // network error occurred
} catch (\TwoCaptcha\Exception\ApiException $e) {
    // api respond with error
} catch (\TwoCaptcha\Exception\TimeoutException $e) {
    // captcha is not solved so far
}