zaman-ua / 2captcha
PHP 包,方便与 2captcha API 集成
Requires
- php: >=5.6
- ext-curl: *
- ext-fileinfo: *
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: 8.5.*
README
将 2Captcha 验证码解析服务快速集成到您的代码中,以自动化解决任何类型的验证码。
安装
该包可以通过 composer 或手动安装
Composer
composer require 2captcha/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');
画布
画布方法可以在您需要围绕图像中的对象绘制线条时使用。返回绘制多边形所需的一系列点的坐标。
$result = $solver->canvas('path/to/captcha.jpg');
点击验证码
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 }