zaman-ua/2captcha

PHP 包,方便与 2captcha API 集成

1.0 2022-12-16 15:19 UTC

This package is auto-updated.

Last update: 2024-09-16 19:08:37 UTC


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
}