From 39db30c13eb55e0c9fc9583b39b9832bc171e11c Mon Sep 17 00:00:00 2001 From: jie Ago Date: Sat, 5 Nov 2022 23:51:39 +0800 Subject: [PATCH] . --- 2captcha-php/.gitignore | 72 + 2captcha-php/README.md | 228 +++ 2captcha-php/composer.json | 48 + 2captcha-php/composer.lock | 1561 +++++++++++++++++ 2captcha-php/examples/canvas.php | 18 + 2captcha-php/examples/canvas_base64.php | 18 + 2captcha-php/examples/canvas_options.php | 22 + 2captcha-php/examples/capy.php | 19 + 2captcha-php/examples/capy_options.php | 23 + 2captcha-php/examples/coordinates.php | 15 + 2captcha-php/examples/coordinates_base64.php | 18 + 2captcha-php/examples/coordinates_options.php | 20 + 2captcha-php/examples/funcaptcha.php | 18 + 2captcha-php/examples/funcaptcha_options.php | 27 + 2captcha-php/examples/geetest.php | 28 + 2captcha-php/examples/geetest_options.php | 30 + 2captcha-php/examples/grid.php | 15 + 2captcha-php/examples/grid_base64.php | 18 + 2captcha-php/examples/grid_options.php | 24 + 2captcha-php/examples/hcaptcha.php | 18 + 2captcha-php/examples/hcaptcha_options.php | 22 + 2captcha-php/examples/images/canvas.jpg | Bin 0 -> 63893 bytes 2captcha-php/examples/images/canvas_hint.jpg | Bin 0 -> 26872 bytes 2captcha-php/examples/images/grid.jpg | Bin 0 -> 40405 bytes 2captcha-php/examples/images/grid_2.jpg | Bin 0 -> 30347 bytes 2captcha-php/examples/images/grid_hint.jpg | Bin 0 -> 5897 bytes 2captcha-php/examples/images/normal.jpg | Bin 0 -> 825 bytes 2captcha-php/examples/images/normal_2.jpg | Bin 0 -> 5207 bytes 2captcha-php/examples/images/rotate.jpg | Bin 0 -> 5363 bytes 2captcha-php/examples/images/rotate_2.jpg | Bin 0 -> 3202 bytes 2captcha-php/examples/images/rotate_3.jpg | Bin 0 -> 16058 bytes 2captcha-php/examples/keycaptcha.php | 21 + 2captcha-php/examples/keycaptcha_options.php | 25 + 2captcha-php/examples/normal.php | 15 + 2captcha-php/examples/normal_base64.php | 18 + 2captcha-php/examples/normal_options.php | 26 + 2captcha-php/examples/recaptcha_v2.php | 18 + .../examples/recaptcha_v2_options.php | 27 + 2captcha-php/examples/recaptcha_v3.php | 19 + .../examples/recaptcha_v3_options.php | 28 + 2captcha-php/examples/rotate.php | 15 + 2captcha-php/examples/rotate_many.php | 19 + 2captcha-php/examples/rotate_options.php | 25 + 2captcha-php/examples/text.php | 15 + 2captcha-php/examples/text_options.php | 18 + 2captcha-php/phpunit.xml | 8 + 2captcha-php/src/ApiClient.php | 135 ++ 2captcha-php/src/Exception/ApiException.php | 10 + .../src/Exception/NetworkException.php | 10 + .../src/Exception/TimeoutException.php | 10 + .../src/Exception/ValidationException.php | 10 + 2captcha-php/src/TwoCaptcha.php | 718 ++++++++ 2captcha-php/src/autoloader.php | 13 + .../tests/AbstractWrapperTestCase.php | 93 + 2captcha-php/tests/CanvasTest.php | 78 + 2captcha-php/tests/CapyTest.php | 28 + 2captcha-php/tests/CoordinatesTest.php | 72 + 2captcha-php/tests/FunCaptchaTest.php | 38 + 2captcha-php/tests/GeeTest.php | 32 + 2captcha-php/tests/GridTest.php | 79 + 2captcha-php/tests/HCaptchaTest.php | 28 + 2captcha-php/tests/KeyCaptchaTest.php | 34 + 2captcha-php/tests/NormalTest.php | 83 + 2captcha-php/tests/ReCaptchaTest.php | 64 + 2captcha-php/tests/RotateTest.php | 113 ++ 2captcha-php/tests/TextTest.php | 35 + 2captcha-php/tests/autoloader.php | 14 + LICENSE | 13 + README.md | 14 + Sign.php | 199 +++ 70 files changed, 4482 insertions(+) create mode 100644 2captcha-php/.gitignore create mode 100644 2captcha-php/README.md create mode 100644 2captcha-php/composer.json create mode 100644 2captcha-php/composer.lock create mode 100644 2captcha-php/examples/canvas.php create mode 100644 2captcha-php/examples/canvas_base64.php create mode 100644 2captcha-php/examples/canvas_options.php create mode 100644 2captcha-php/examples/capy.php create mode 100644 2captcha-php/examples/capy_options.php create mode 100644 2captcha-php/examples/coordinates.php create mode 100644 2captcha-php/examples/coordinates_base64.php create mode 100644 2captcha-php/examples/coordinates_options.php create mode 100644 2captcha-php/examples/funcaptcha.php create mode 100644 2captcha-php/examples/funcaptcha_options.php create mode 100644 2captcha-php/examples/geetest.php create mode 100644 2captcha-php/examples/geetest_options.php create mode 100644 2captcha-php/examples/grid.php create mode 100644 2captcha-php/examples/grid_base64.php create mode 100644 2captcha-php/examples/grid_options.php create mode 100644 2captcha-php/examples/hcaptcha.php create mode 100644 2captcha-php/examples/hcaptcha_options.php create mode 100644 2captcha-php/examples/images/canvas.jpg create mode 100644 2captcha-php/examples/images/canvas_hint.jpg create mode 100644 2captcha-php/examples/images/grid.jpg create mode 100644 2captcha-php/examples/images/grid_2.jpg create mode 100644 2captcha-php/examples/images/grid_hint.jpg create mode 100644 2captcha-php/examples/images/normal.jpg create mode 100644 2captcha-php/examples/images/normal_2.jpg create mode 100644 2captcha-php/examples/images/rotate.jpg create mode 100644 2captcha-php/examples/images/rotate_2.jpg create mode 100644 2captcha-php/examples/images/rotate_3.jpg create mode 100644 2captcha-php/examples/keycaptcha.php create mode 100644 2captcha-php/examples/keycaptcha_options.php create mode 100644 2captcha-php/examples/normal.php create mode 100644 2captcha-php/examples/normal_base64.php create mode 100644 2captcha-php/examples/normal_options.php create mode 100644 2captcha-php/examples/recaptcha_v2.php create mode 100644 2captcha-php/examples/recaptcha_v2_options.php create mode 100644 2captcha-php/examples/recaptcha_v3.php create mode 100644 2captcha-php/examples/recaptcha_v3_options.php create mode 100644 2captcha-php/examples/rotate.php create mode 100644 2captcha-php/examples/rotate_many.php create mode 100644 2captcha-php/examples/rotate_options.php create mode 100644 2captcha-php/examples/text.php create mode 100644 2captcha-php/examples/text_options.php create mode 100644 2captcha-php/phpunit.xml create mode 100644 2captcha-php/src/ApiClient.php create mode 100644 2captcha-php/src/Exception/ApiException.php create mode 100644 2captcha-php/src/Exception/NetworkException.php create mode 100644 2captcha-php/src/Exception/TimeoutException.php create mode 100644 2captcha-php/src/Exception/ValidationException.php create mode 100644 2captcha-php/src/TwoCaptcha.php create mode 100644 2captcha-php/src/autoloader.php create mode 100644 2captcha-php/tests/AbstractWrapperTestCase.php create mode 100644 2captcha-php/tests/CanvasTest.php create mode 100644 2captcha-php/tests/CapyTest.php create mode 100644 2captcha-php/tests/CoordinatesTest.php create mode 100644 2captcha-php/tests/FunCaptchaTest.php create mode 100644 2captcha-php/tests/GeeTest.php create mode 100644 2captcha-php/tests/GridTest.php create mode 100644 2captcha-php/tests/HCaptchaTest.php create mode 100644 2captcha-php/tests/KeyCaptchaTest.php create mode 100644 2captcha-php/tests/NormalTest.php create mode 100644 2captcha-php/tests/ReCaptchaTest.php create mode 100644 2captcha-php/tests/RotateTest.php create mode 100644 2captcha-php/tests/TextTest.php create mode 100644 2captcha-php/tests/autoloader.php create mode 100644 LICENSE create mode 100644 README.md create mode 100644 Sign.php diff --git a/2captcha-php/.gitignore b/2captcha-php/.gitignore new file mode 100644 index 0000000..50a6ee2 --- /dev/null +++ b/2captcha-php/.gitignore @@ -0,0 +1,72 @@ +#PHP and development related +.idea +/vendor + +# Mac OS General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# Linux possible garbage +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* \ No newline at end of file diff --git a/2captcha-php/README.md b/2captcha-php/README.md new file mode 100644 index 0000000..6801547 --- /dev/null +++ b/2captcha-php/README.md @@ -0,0 +1,228 @@ +# PHP Module for 2Captcha API +The easiest way to quickly integrate [2Captcha] captcha solving service into your code to automate solving of any types of captcha. + +- [Installation](#installation) + - [Composer](#composer) + - [Manual](#manual) +- [Configuration](#configuration) +- [Solve captcha](#solve-captcha) + - [Normal Captcha](#normal-captcha) + - [Text](#text-captcha) + - [ReCaptcha v2](#recaptcha-v2) + - [ReCaptcha v3](#recaptcha-v3) + - [FunCaptcha](#funcaptcha) + - [GeeTest](#geetest) + - [hCaptcha](#hcaptcha) + - [KeyCaptcha](#keycaptcha) + - [Capy](#capy) + - [Grid (ReCaptcha V2 Old Method)](#grid) + - [Canvas](#canvas) + - [ClickCaptcha](#clickcaptcha) + - [Rotate](#rotate) +- [Other methods](#other-methods) + - [send / getResult](#send--getresult) + - [balance](#balance) + - [report](#report) +- [Error handling](#error-handling) + + +## Installation +This package can be installed via composer or manually + +### Composer +``` +composer require 2captcha/2captcha +``` + +### Manual +Copy `src` directory to your project and then `require` autoloader (`src/autoloader.php`) where needed: +```php +require 'path/to/autoloader.php'; +``` + +## Configuration +`TwoCaptcha` instance can be created like this: +```php +$solver = new \TwoCaptcha\TwoCaptcha('YOUR_API_KEY'); +``` +Also there are few options that can be configured: +```php +$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 instance options + +|Option|Default value|Description| +|---|---|---| +|softId|-|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| +|defaultTimeout|120|Polling timeout in seconds for all captcha types except ReCaptcha. Defines how long the module tries to get the answer from `res.php` API endpoint| +|recaptchaTimeout|600|Polling timeout for ReCaptcha in seconds. Defines how long the module tries to get the answer from `res.php` API endpoint| +|pollingInterval|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 `TwoCaptcha` 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 [getResult method](#send--getresult) + +## Solve captcha +When you submit any image-based captcha use can provide additional options to help 2captcha workers to solve it properly. + +### Captcha options +|Option|Default Value|Description| +|---|---|---| +|numeric|0|Defines if captcha contains numeric or other symbols [see more info in the API docs][post options]| +|minLength|0|minimal answer lenght| +|maxLength|0|maximum answer length| +|phrase|0|defines if the answer contains multiple words or not| +|caseSensitive|0|defines if the answer is case sensitive| +|calc|0|defines captcha requires calculation| +|lang|-|defines the captcha language, see the [list of supported languages] | +|hintImg|-|an image with hint shown to workers with the captcha| +|hintText|-|hint or task text shown to workers with the captcha| + +Below you can find basic examples for every captcha type. Check out [examples directory] to find more examples with all available options. + +### 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. +```php +$result = $solver->normal('path/to/captcha.jpg'); +``` +### Text Captcha +This method can be used to bypass a captcha that requires to answer a question provided in clear text. +```php +$result = $solver->text('If tomorrow is Saturday, what day is today?'); +``` +### ReCaptcha v2 +Use this method to solve ReCaptcha V2 and obtain a token to bypass the protection. +```php +$result = $solver->recaptcha([ + 'sitekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + 'url' => 'https://mysite.com/page/with/recaptcha', +]); +``` +### ReCaptcha v3 +This method provides ReCaptcha V3 solver and returns a token. +```php +$result = $solver->recaptcha([ + 'sitekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + 'url' => 'https://mysite.com/page/with/recaptcha', + 'version' => 'v3', +]); +``` +### FunCaptcha +FunCaptcha (Arkoselabs) solving method. Returns a token. +```php +$result = $solver->funcaptcha([ + 'sitekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + 'url' => 'https://mysite.com/page/with/funcaptcha', +]); +``` +### GeeTest +Method to solve GeeTest puzzle captcha. Returns a set of tokens as JSON. +```php +$result = $solver->geetest([ + 'gt' => 'f1ab2cdefa3456789012345b6c78d90e', + 'challenge' => '12345678abc90123d45678ef90123a456b', + 'url' => 'https://www.site.com/page/', +]); +``` +### hCaptcha +Use this method to solve hCaptcha challenge. Returns a token to bypass captcha. +```php +$result = $solver->hcaptcha([ + 'sitekey' => '10000000-ffff-ffff-ffff-000000000001', + 'url' => 'https://www.site.com/page/', +]); +``` +### KeyCaptcha +Token-based method to solve KeyCaptcha. +```php +$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 +Token-based method to bypass Capy puzzle captcha. +```php +$result = $solver->capy([ + 'sitekey' => 'PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v', + 'url' => 'http://mysite.com/', + 'api_server' => 'https://jp.api.capy.me/', +]); +``` +### 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. +```php +$result = $solver->grid('path/to/captcha.jpg'); +``` +### 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. +```php +$result = $solver->canvas('path/to/captcha.jpg'); +``` +### ClickCaptcha +ClickCaptcha method returns coordinates of points on captcha image. Can be used if you need to click on particular points on the image. +```php +$result = $solver->coordinates('path/to/captcha.jpg'); +``` +### Rotate +This method can be used to solve a captcha that asks to rotate an object. Mostly used to bypass FunCaptcha. Returns the rotation angle. +```php +$result = $solver->rotate('path/to/captcha.jpg'); +``` + +## Other methods + +### send / getResult +These methods can be used for manual captcha submission and answer polling. +```php +$id = $solver->send(['file' => 'path/to/captcha.jpg', ...]); + +sleep(20); + +$code = $solver->getResult($id); +``` +### balance +Use this method to get your account's balance +```php +$balance = $solver->balance(); +``` +### report +Use this method to report good or bad captcha answer. +```php +$solver->report($id, true); // captcha solved correctly +$solver->report($id, false); // captcha solved incorrectly +``` + +## Error handling +If case of an error captch solver throws an exception. It's important to properly handle these cases. We recommend to use `try catch` to handle exceptions. +```php +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 +} +``` +[2Captcha]: https://2captcha.com/ +[2captcha sofware catalog]: https://2captcha.com/software +[pingback settings]: https://2captcha.com/setting/pingback +[post options]: https://2captcha.com/2captcha-api#normal_post +[list of supported languages]: https://2captcha.com/2captcha-api#language +[examples directory]: /examples diff --git a/2captcha-php/composer.json b/2captcha-php/composer.json new file mode 100644 index 0000000..fefb319 --- /dev/null +++ b/2captcha-php/composer.json @@ -0,0 +1,48 @@ +{ + "name": "2captcha/2captcha", + "description": "PHP package for easy integration with 2captcha API", + "keywords": [ + "2captcha", + "captcha", + "recaptcha", + "funcaptcha", + "keycaptcha", + "geetest", + "anticaptcha", + "hcaptcha", + "recaptcha v2", + "recaptcha v3", + "bypass captcha", + "solve captcha", + "captcha solver", + "decaptcha", + "2captcha.com" + ], + "license": "MIT", + "authors": [ + { + "name": "2captcha", + "email": "info@2captcha.com", + "homepage": "https://2captcha.com/" + } + ], + "require": { + "php": ">=5.6", + "ext-curl": "*", + "ext-mbstring": "*", + "ext-fileinfo": "*" + }, + "require-dev": { + "phpunit/phpunit": "8.5.*" + }, + "autoload": { + "psr-4": { + "TwoCaptcha\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "TwoCaptcha\\Tests\\": "tests/" + } + } +} \ No newline at end of file diff --git a/2captcha-php/composer.lock b/2captcha-php/composer.lock new file mode 100644 index 0000000..b1e1ccf --- /dev/null +++ b/2captcha-php/composer.lock @@ -0,0 +1,1561 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "4a41b7c8e06b03131552e056ff1d9e89", + "packages": [], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2019-10-21T16:45:58+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.9.5", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2020-01-17T21:11:47+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2018-07-08T19:19:57+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2020-04-27T09:25:28+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "shasum": "" + }, + "require": { + "ext-filter": "^7.1", + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0", + "phpdocumentor/type-resolver": "^1.0", + "webmozart/assert": "^1" + }, + "require-dev": { + "doctrine/instantiator": "^1", + "mockery/mockery": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2020-02-22T12:28:44+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", + "shasum": "" + }, + "require": { + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "^7.2", + "mockery/mockery": "~1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2020-02-18T18:59:58+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.10.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "451c3cd1418cf640de218914901e51b064abb093" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2020-03-05T15:02:03+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "7.0.10", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf", + "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.2", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.1.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^4.2.2", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.2.2" + }, + "suggest": { + "ext-xdebug": "^2.7.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2019-11-20T13:55:58+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "050bedf145a257b1ff02746c31894800e5122946" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2018-09-13T20:33:42+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2019-06-07T04:22:29+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2019-09-17T06:23:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "8.5.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/63dda3b212a0025d380a745f91bdb4d8c985adb7", + "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.9.1", + "phar-io/manifest": "^1.0.3", + "phar-io/version": "^2.0.1", + "php": "^7.2", + "phpspec/prophecy": "^1.8.1", + "phpunit/php-code-coverage": "^7.0.7", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1.2", + "sebastian/comparator": "^3.0.2", + "sebastian/diff": "^3.0.2", + "sebastian/environment": "^4.2.2", + "sebastian/exporter": "^3.1.1", + "sebastian/global-state": "^3.0.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0.1", + "sebastian/type": "^1.1.3", + "sebastian/version": "^2.0.1" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0.0" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-05-22T13:51:52+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "shasum": "" + }, + "require": { + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-07-12T15:12:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "time": "2019-02-04T06:01:07+00:00" + }, + { + "name": "sebastian/environment", + "version": "4.2.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2019-11-20T08:46:58+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2019-09-14T09:02:43+00:00" + }, + { + "name": "sebastian/global-state", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "shasum": "" + }, + "require": { + "php": "^7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2019-02-01T05:30:01+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2018-10-04T04:07:39+00:00" + }, + { + "name": "sebastian/type", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", + "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", + "shasum": "" + }, + "require": { + "php": "^7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "time": "2019-07-02T08:10:15+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:14:59+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2019-06-13T22:48:21+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6", + "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2020-04-18T12:12:48+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.6", + "ext-curl": "*", + "ext-mbstring": "*", + "ext-fileinfo": "*" + }, + "platform-dev": [], + "plugin-api-version": "1.1.0" +} diff --git a/2captcha-php/examples/canvas.php b/2captcha-php/examples/canvas.php new file mode 100644 index 0000000..69b5eb2 --- /dev/null +++ b/2captcha-php/examples/canvas.php @@ -0,0 +1,18 @@ +canvas([ + 'file' => __DIR__ . '/images/canvas.jpg', + 'hintText' => 'Draw around apple', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/canvas_base64.php b/2captcha-php/examples/canvas_base64.php new file mode 100644 index 0000000..1f87cc1 --- /dev/null +++ b/2captcha-php/examples/canvas_base64.php @@ -0,0 +1,18 @@ +canvas(['base64' => $base64, 'hintText' => 'Draw around apple']); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/canvas_options.php b/2captcha-php/examples/canvas_options.php new file mode 100644 index 0000000..0fdfd6e --- /dev/null +++ b/2captcha-php/examples/canvas_options.php @@ -0,0 +1,22 @@ +canvas([ + 'file' => __DIR__ . '/images/canvas.jpg', + 'previousId' => 0, + 'canSkip' => 0, + 'lang' => 'en', + 'hintImg' => __DIR__ . '/images/canvas_hint.jpg', + 'hintText' => 'Draw around apple', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/capy.php b/2captcha-php/examples/capy.php new file mode 100644 index 0000000..3115809 --- /dev/null +++ b/2captcha-php/examples/capy.php @@ -0,0 +1,19 @@ +capy([ + 'sitekey' => 'PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v', + 'url' => 'https://www.mysite.com/captcha/', + 'api_server' => 'https://jp.api.capy.me/' + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/capy_options.php b/2captcha-php/examples/capy_options.php new file mode 100644 index 0000000..2fa1420 --- /dev/null +++ b/2captcha-php/examples/capy_options.php @@ -0,0 +1,23 @@ +capy([ + 'sitekey' => 'PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v', + 'url' => 'http://mysite.com/', + 'api_server' => 'https://jp.api.capy.me/', + 'proxy' => [ + 'type' => 'HTTPS', + 'uri' => 'login:password@IP_address:PORT', + ], + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/coordinates.php b/2captcha-php/examples/coordinates.php new file mode 100644 index 0000000..0dbc2c1 --- /dev/null +++ b/2captcha-php/examples/coordinates.php @@ -0,0 +1,15 @@ +coordinates(__DIR__ . '/images/grid.jpg'); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/coordinates_base64.php b/2captcha-php/examples/coordinates_base64.php new file mode 100644 index 0000000..0e6cf32 --- /dev/null +++ b/2captcha-php/examples/coordinates_base64.php @@ -0,0 +1,18 @@ +coordinates(['base64' => $base64]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/coordinates_options.php b/2captcha-php/examples/coordinates_options.php new file mode 100644 index 0000000..01c7bff --- /dev/null +++ b/2captcha-php/examples/coordinates_options.php @@ -0,0 +1,20 @@ +coordinates([ + 'file' => __DIR__ . '/images/grid_2.jpg', + 'lang' => 'en', + // 'hintImg' => __DIR__ . '/images/grid_hint.jpg' + 'hintText' => 'Select all images with an Orange', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/funcaptcha.php b/2captcha-php/examples/funcaptcha.php new file mode 100644 index 0000000..e258a6a --- /dev/null +++ b/2captcha-php/examples/funcaptcha.php @@ -0,0 +1,18 @@ +funcaptcha([ + 'sitekey' => '69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC', + 'url' => 'https://mysite.com/page/with/funcaptcha', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/funcaptcha_options.php b/2captcha-php/examples/funcaptcha_options.php new file mode 100644 index 0000000..7ef4b78 --- /dev/null +++ b/2captcha-php/examples/funcaptcha_options.php @@ -0,0 +1,27 @@ +funcaptcha([ + 'sitekey' => '69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC', + 'url' => 'https://mysite.com/page/with/funcaptcha', + 'surl' => 'https://client-api.arkoselabs.com', + 'userAgent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36', + 'data' => [ + 'anyKey' => 'anyStringValue', + ], + 'proxy' => [ + 'type' => 'HTTPS', + 'uri' => 'login:password@IP_address:PORT', + ], + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/geetest.php b/2captcha-php/examples/geetest.php new file mode 100644 index 0000000..b63fb6c --- /dev/null +++ b/2captcha-php/examples/geetest.php @@ -0,0 +1,28 @@ +geetest([ + 'gt' => 'f2ae6cadcf7886856696502e1d55e00c', + 'apiServer' => 'api-na.geetest.com', + 'challenge' => $challenge, + 'url' => 'https://mysite.com/captcha.html', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/geetest_options.php b/2captcha-php/examples/geetest_options.php new file mode 100644 index 0000000..7394d33 --- /dev/null +++ b/2captcha-php/examples/geetest_options.php @@ -0,0 +1,30 @@ +geetest([ + 'gt' => 'f2ae6cadcf7886856696502e1d55e00c', + 'apiServer' => 'api-na.geetest.com', + 'challenge' => $challenge, + 'url' => 'https://launches.endclothing.com/distil_r_captcha.html', + 'proxy' => [ + 'type' => 'HTTPS', + 'uri' => 'login:password@IP_address:PORT', + ], + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/grid.php b/2captcha-php/examples/grid.php new file mode 100644 index 0000000..ffe3731 --- /dev/null +++ b/2captcha-php/examples/grid.php @@ -0,0 +1,15 @@ +grid(__DIR__ . '/images/grid.jpg'); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/grid_base64.php b/2captcha-php/examples/grid_base64.php new file mode 100644 index 0000000..6daaab8 --- /dev/null +++ b/2captcha-php/examples/grid_base64.php @@ -0,0 +1,18 @@ +grid(['base64' => $base64]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/grid_options.php b/2captcha-php/examples/grid_options.php new file mode 100644 index 0000000..c1612f3 --- /dev/null +++ b/2captcha-php/examples/grid_options.php @@ -0,0 +1,24 @@ +grid([ + 'file' => __DIR__ . '/images/grid_2.jpg', + 'rows' => 3, + 'cols' => 3, + 'previousId' => 0, + 'canSkip' => 0, + 'lang' => 'en', + // 'hintImg' => __DIR__ . '/images/grid_hint.jpg', + 'hintText' => 'Select all images with an Orange', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/hcaptcha.php b/2captcha-php/examples/hcaptcha.php new file mode 100644 index 0000000..6a25033 --- /dev/null +++ b/2captcha-php/examples/hcaptcha.php @@ -0,0 +1,18 @@ +hcaptcha([ + 'sitekey' => '10000000-ffff-ffff-ffff-000000000001', + 'url' => 'https://www.site.com/page/', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/hcaptcha_options.php b/2captcha-php/examples/hcaptcha_options.php new file mode 100644 index 0000000..b75754d --- /dev/null +++ b/2captcha-php/examples/hcaptcha_options.php @@ -0,0 +1,22 @@ +hcaptcha([ + 'sitekey' => '10000000-ffff-ffff-ffff-000000000001', + 'url' => 'https://www.site.com/page/', + 'proxy' => [ + 'type' => 'HTTPS', + 'uri' => 'login:password@IP_address:PORT', + ], + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/images/canvas.jpg b/2captcha-php/examples/images/canvas.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d4a70dbab631e840032b793fca4f1da116363c1 GIT binary patch literal 63893 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 literal 0 HcmV?d00001 diff --git a/2captcha-php/examples/images/grid.jpg b/2captcha-php/examples/images/grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..064e4aa14d8d5870b4ba1f7a4a1543f7a9935b9f GIT binary patch literal 40405 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 literal 0 HcmV?d00001 diff --git a/2captcha-php/examples/images/grid_2.jpg b/2captcha-php/examples/images/grid_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9ce6685ca23b96c38df0f1d121c407c13281bdc GIT binary patch literal 30347 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%0D7{ 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 E0MnFK^#A|> literal 0 HcmV?d00001 diff --git a/2captcha-php/examples/images/normal.jpg b/2captcha-php/examples/images/normal.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1770b3f545f5b18c6c5560dfdf37fa4662972a2 GIT binary patch literal 825 zcmeAS@N?(olHy`uVBq!ia0vp^CxF<7g9%8ku}nG!q&N#aB8wRq_>O=u<5X=vX$A(S z*PbqpAr*7p&e6>~>>$uOdDQ}Sj_qAtT!)ydrZvcEE2L{`XlrP#I#k@WNn}k*4Y5XtjT|gpt_lG< zOpQr`9OzOl?yvO&ICrPbkJ}TsPvqa%jh0{H?Bnf3|NR!YeRS^es@l3!KUTlLzyHyF zl?$sw#OK60dzEgy)V(D4COa7YG|^0Y7c%3O(7G4X_czqVOpH_OR{iqq@$-~>QJRy>UR%xnK4k@`vFDC6 zM^3HC{&h7#cU>FXfr8jzeg4l03^(>@XQza+yk94JRPQ=P2NjpyxXGG zclMylF|A1R8)e}_Ja=zJO!2s~QF8T4g9IZUsl0p9yIS=py}Th~a$4!h4WBI0Equ!g zSw+3={?0t#nHjKhXQ;)-oMx>9cSBGA{FG^`KJCrMwl%AE=U%_RN59Fa(^M!VWA&fy zZ(p+%U0CmGzdC|_?gag5=1Z@&wLdpge$uhEXz9A?>)-7#FM4yMtUUGflV^9QhWec| z;$Ut1_G$0s`41N#&g@LRv1GRr*IM66(Q1)TU!}Zc*?4WI?}WuVlOOhZHI;mR_t{kc zc96wMl>pf(yO-X%+g-J0;hIky(#>7ob^UBC|2s2qN<>j(*o{5X`;zV(O^Oc7?l_cG z8aUxha|GjIdDf4d0c#p6<=uP)d|S)!zf)34x>l)ka<|n@c|WnUYuYbNH0LqC6!d9< wysfhC>EEvQn>e&8z1u6Av7|I;B77+SYqI0Tb(ODufq8+!)78&qol`;+0O6>7ga7~l literal 0 HcmV?d00001 diff --git a/2captcha-php/examples/images/normal_2.jpg b/2captcha-php/examples/images/normal_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1f50355b6cc202368eee79e5551041167735248 GIT binary patch literal 5207 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ⅇ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[ + '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/', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/keycaptcha_options.php b/2captcha-php/examples/keycaptcha_options.php new file mode 100644 index 0000000..35127a7 --- /dev/null +++ b/2captcha-php/examples/keycaptcha_options.php @@ -0,0 +1,25 @@ +code = $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/', + 'proxy' => [ + 'type' => 'HTTPS', + 'uri' => 'login:password@IP_address:PORT', + ], + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/normal.php b/2captcha-php/examples/normal.php new file mode 100644 index 0000000..001e79f --- /dev/null +++ b/2captcha-php/examples/normal.php @@ -0,0 +1,15 @@ +normal(__DIR__ . '/images/normal.jpg'); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/normal_base64.php b/2captcha-php/examples/normal_base64.php new file mode 100644 index 0000000..f7eb3a0 --- /dev/null +++ b/2captcha-php/examples/normal_base64.php @@ -0,0 +1,18 @@ +normal(['base64' => $base64]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/normal_options.php b/2captcha-php/examples/normal_options.php new file mode 100644 index 0000000..b7089b4 --- /dev/null +++ b/2captcha-php/examples/normal_options.php @@ -0,0 +1,26 @@ +normal([ + 'file' => __DIR__ . '/images/normal_2.jpg', + 'numeric' => 4, + 'minLen' => 4, + 'maxLen' => 20, + 'phrase' => 1, + 'caseSensitive' => 1, + 'calc' => 0, + 'lang' => 'en', + // 'hintImg' => __DIR__ . '/images/normal_hint.jpg', + // 'hintText' => 'Type red symbols only', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/recaptcha_v2.php b/2captcha-php/examples/recaptcha_v2.php new file mode 100644 index 0000000..195d5ce --- /dev/null +++ b/2captcha-php/examples/recaptcha_v2.php @@ -0,0 +1,18 @@ +recaptcha([ + 'sitekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + 'url' => 'https://mysite.com/page/with/recaptcha', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/recaptcha_v2_options.php b/2captcha-php/examples/recaptcha_v2_options.php new file mode 100644 index 0000000..a74e928 --- /dev/null +++ b/2captcha-php/examples/recaptcha_v2_options.php @@ -0,0 +1,27 @@ + 'YOUR_API_KEY', + 'server' => 'http://rucaptcha.com' +]); + +try { + $result = $solver->recaptcha([ + 'sitekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + 'url' => 'https://mysite.com/page/with/recaptcha', + 'invisible' => 1, + 'action' => 'verify', + 'proxy' => [ + 'type' => 'HTTPS', + 'uri' => 'login:password@IP_address:PORT', + ], + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/recaptcha_v3.php b/2captcha-php/examples/recaptcha_v3.php new file mode 100644 index 0000000..838d397 --- /dev/null +++ b/2captcha-php/examples/recaptcha_v3.php @@ -0,0 +1,19 @@ +recaptcha([ + 'sitekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + 'url' => 'https://mysite.com/page/with/recaptcha', + 'version' => 'v3', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/recaptcha_v3_options.php b/2captcha-php/examples/recaptcha_v3_options.php new file mode 100644 index 0000000..5897bd9 --- /dev/null +++ b/2captcha-php/examples/recaptcha_v3_options.php @@ -0,0 +1,28 @@ + 'YOUR_API_KEY', + 'server' => 'http://2captcha.com' +]); + +try { + $result = $solver->recaptcha([ + 'sitekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + 'url' => 'https://mysite.com/page/with/recaptcha', + 'version' => 'v3', + 'action' => 'verify', + 'score' => 0.3, + 'proxy' => [ + 'type' => 'HTTPS', + 'uri' => 'login:password@IP_address:PORT', + ], + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/rotate.php b/2captcha-php/examples/rotate.php new file mode 100644 index 0000000..0517527 --- /dev/null +++ b/2captcha-php/examples/rotate.php @@ -0,0 +1,15 @@ +rotate(__DIR__ . '/images/rotate.jpg'); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/rotate_many.php b/2captcha-php/examples/rotate_many.php new file mode 100644 index 0000000..2fbf29c --- /dev/null +++ b/2captcha-php/examples/rotate_many.php @@ -0,0 +1,19 @@ +rotate([ + __DIR__ . '/images/rotate.jpg', + __DIR__ . '/images/rotate_2.jpg', + __DIR__ . '/images/rotate_3.jpg', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/rotate_options.php b/2captcha-php/examples/rotate_options.php new file mode 100644 index 0000000..8eae4dc --- /dev/null +++ b/2captcha-php/examples/rotate_options.php @@ -0,0 +1,25 @@ +rotate([ + 'files' => [ + __DIR__ . '/images/rotate.jpg', + __DIR__ . '/images/rotate_2.jpg', + __DIR__ . '/images/rotate_3.jpg', + ], + 'angle' => 40, + 'lang' => 'en', + // 'hintImg' => __DIR__ . '/images/rotate_hint.jpg' + 'hintText' => 'Put the images in the correct way up', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/text.php b/2captcha-php/examples/text.php new file mode 100644 index 0000000..ae48d20 --- /dev/null +++ b/2captcha-php/examples/text.php @@ -0,0 +1,15 @@ +text('If tomorrow is Saturday, what day is today?'); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/examples/text_options.php b/2captcha-php/examples/text_options.php new file mode 100644 index 0000000..1a5cf8e --- /dev/null +++ b/2captcha-php/examples/text_options.php @@ -0,0 +1,18 @@ +text([ + 'text' => 'If tomorrow is Saturday, what day is today?', + 'lang' => 'en', + ]); +} catch (\Exception $e) { + die($e->getMessage()); +} + +die('Captcha solved: ' . $result->code); diff --git a/2captcha-php/phpunit.xml b/2captcha-php/phpunit.xml new file mode 100644 index 0000000..e871e6a --- /dev/null +++ b/2captcha-php/phpunit.xml @@ -0,0 +1,8 @@ + + + + tests + tests/autoloader.php + + + \ No newline at end of file diff --git a/2captcha-php/src/ApiClient.php b/2captcha-php/src/ApiClient.php new file mode 100644 index 0000000..dd9e76e --- /dev/null +++ b/2captcha-php/src/ApiClient.php @@ -0,0 +1,135 @@ +server = $options; + } + } + + /** + * Network client + * + * @resource + */ + private $curl; + + + /** + * Sends captcha to /in.php + * + * @param $captcha + * @param array $files + * @return bool|string + * @throws ApiException + * @throws NetworkException + */ + public function in($captcha, $files = []) + { + if (!$this->curl) $this->curl = curl_init(); + + foreach ($files as $key => $file) { + $captcha[$key] = $this->curlPrepareFile($file); + } + + curl_setopt_array($this->curl, [ + CURLOPT_URL => $this->server . '/in.php', + CURLOPT_RETURNTRANSFER => 1, + CURLOPT_TIMEOUT => 60, + CURLOPT_POST => 1, + CURLOPT_POSTFIELDS => $captcha, + ]); + + return $this->execute(); + } + + /** + * Does request to /res.php + * + * @param $query + * @return bool|string + * @throws ApiException + * @throws NetworkException + */ + public function res($query) + { + if (!$this->curl) $this->curl = curl_init(); + + $url = $this->server . '/res.php'; + + if ($query) $url .= '?' . http_build_query($query); + + curl_setopt_array($this->curl, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => 1, + CURLOPT_TIMEOUT => 60, + CURLOPT_POST => 0, + ]); + + return $this->execute(); + } + + /** + * Executes http request to api + * + * @return bool|string + * @throws ApiException + * @throws NetworkException + */ + private function execute() + { + $response = curl_exec($this->curl); + + if (curl_errno($this->curl)) { + throw new NetworkException(curl_error($this->curl)); + } + + if (mb_strpos($response, 'ERROR_') === 0) { + throw new ApiException($response); + } + + return $response; + } + + /** + * Different php versions have different approaches of sending files via CURL + * + * @param $file + * @return \CURLFile|string + */ + private function curlPrepareFile($file) + { + if (function_exists('curl_file_create')) { // php 5.5+ + return curl_file_create($file, mime_content_type($file), 'file'); + } else { + return '@' . realpath($file); + } + } + + /** + * Closes active CURL resource if it was created + */ + public function __destruct() + { + if ($this->curl) { + curl_close($this->curl); + } + } +} diff --git a/2captcha-php/src/Exception/ApiException.php b/2captcha-php/src/Exception/ApiException.php new file mode 100644 index 0000000..1d0ca14 --- /dev/null +++ b/2captcha-php/src/Exception/ApiException.php @@ -0,0 +1,10 @@ + $options, + ]; + } + + if (!empty($options['server'])) $this->server = $options['server']; + if (!empty($options['apiKey'])) $this->apiKey = $options['apiKey']; + if (!empty($options['softId'])) $this->softId = $options['softId']; + if (!empty($options['callback'])) $this->callback = $options['callback']; + if (!empty($options['defaultTimeout'])) $this->defaultTimeout = $options['defaultTimeout']; + if (!empty($options['recaptchaTimeout'])) $this->recaptchaTimeout = $options['recaptchaTimeout']; + if (!empty($options['pollingInterval'])) $this->pollingInterval = $options['pollingInterval']; + + $this->apiClient = new ApiClient($this->server); + } + + public function setHttpClient($apiClient) + { + $this->apiClient = $apiClient; + } + + /** + * Wrapper for solving normal captcha (image) + * + * @param $captcha + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function normal($captcha) + { + if (is_string($captcha)) { + $captcha = [ + 'file' => $captcha, + ]; + } + + $this->requireFileOrBase64($captcha); + + $captcha['method'] = empty($captcha['base64']) ? 'post' : 'base64'; + + return $this->solve($captcha); + } + + /** + * Wrapper for solving text captcha + * + * @param $captcha + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function text($captcha) + { + if (is_string($captcha)) { + $captcha = [ + 'text' => $captcha, + ]; + } + + $captcha['method'] = 'post'; + + return $this->solve($captcha); + } + + /** + * Wrapper for solving ReCaptcha + * + * @param $captcha + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function recaptcha($captcha) + { + $captcha['method'] = 'userrecaptcha'; + + return $this->solve($captcha, ['timeout' => $this->recaptchaTimeout]); + } + + /** + * Wrapper for solving FunCaptcha + * + * @param $captcha + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function funcaptcha($captcha) + { + $captcha['method'] = 'funcaptcha'; + + return $this->solve($captcha); + } + + /** + * Wrapper for solving GeeTest + * + * @param $captcha + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function geetest($captcha) + { + $captcha['method'] = 'geetest'; + + return $this->solve($captcha); + } + + /** + * Wrapper for solving hCaptcha + * + * @param $captcha + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function hcaptcha($captcha) + { + $captcha['method'] = 'hcaptcha'; + + return $this->solve($captcha); + } + + /** + * Wrapper for solving KeyCaptcha + * + * @param $captcha + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function keycaptcha($captcha) + { + $captcha['method'] = 'keycaptcha'; + + return $this->solve($captcha); + } + + /** + * Wrapper for solving Capy captcha + * + * @param $captcha + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function capy($captcha) + { + $captcha['method'] = 'capy'; + + return $this->solve($captcha); + } + + /** + * Wrapper for solving grid captcha + * + * @param $captcha + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function grid($captcha) + { + if (is_string($captcha)) { + $captcha = [ + 'file' => $captcha, + ]; + } + + $this->requireFileOrBase64($captcha); + + $captcha['method'] = empty($captcha['base64']) ? 'post' : 'base64'; + + return $this->solve($captcha); + } + + /** + * Wrapper for solving canvas captcha + * + * @param $captcha + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function canvas($captcha) + { + if (is_string($captcha)) { + $captcha = [ + 'file' => $captcha, + ]; + } + + $this->requireFileOrBase64($captcha); + + $captcha['method'] = empty($captcha['base64']) ? 'post' : 'base64'; + $captcha['recaptcha']=1; + $captcha['canvas'] = 1; + + if ( empty($captcha['hintText']) && empty($captcha['hintImg']) ) { + throw new ValidationException('At least one of parameters: hintText or hintImg required!'); + } + + return $this->solve($captcha); + } + + /** + * Wrapper for solving coordinates captcha + * + * @param $captcha + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function coordinates($captcha) + { + if (is_string($captcha)) { + $captcha = [ + 'file' => $captcha, + ]; + } + + $this->requireFileOrBase64($captcha); + + $captcha['method'] = empty($captcha['base64']) ? 'post' : 'base64'; + $captcha['coordinatescaptcha'] = 1; + + return $this->solve($captcha); + } + + /** + * Wrapper for solving RotateCaptcha + * + * @param $captcha + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function rotate($captcha) + { + if (is_string($captcha)) { + $captcha = [ + 'file' => $captcha, + ]; + } + + if (!$this->isArrayAssoc($captcha)) { + $captcha = [ + 'files' => $captcha, + ]; + } + + if (isset($captcha['file'])) { + $captcha['files'] = [$captcha['file']]; + unset($captcha['file']); + } + + $this->prepareFilesList($captcha); + + $captcha['method'] = 'rotatecaptcha'; + + return $this->solve($captcha); + } + + /** + * Sends captcha to `/in.php` and waits for it's result. + * This helper can be used insted of manual using of `send` and `getResult` functions. + * + * @param $captcha + * @param array $waitOptions + * @return \stdClass + * @throws ApiException + * @throws NetworkException + * @throws TimeoutException + * @throws ValidationException + */ + public function solve($captcha, $waitOptions = []) + { + $result = new \stdClass(); + + $result->captchaId = $this->send($captcha); + + if ($this->lastCaptchaHasCallback) return $result; + + $result->code = $this->waitForResult($result->captchaId, $waitOptions); + + return $result; + } + + /** + * This helper waits for captcha result, and when result is ready, returns it + * + * @param $id + * @param array $waitOptions + * @return string|null + * @throws TimeoutException + */ + public function waitForResult($id, $waitOptions = []) + { + $startedAt = time(); + + $timeout = empty($waitOptions['timeout']) ? $this->defaultTimeout : $waitOptions['timeout']; + $pollingInterval = empty($waitOptions['pollingInterval']) ? $this->pollingInterval : $waitOptions['pollingInterval']; + + while (true) { + if (time() - $startedAt < $timeout) { + sleep($pollingInterval); + } else { + break; + } + + try { + $code = $this->getResult($id); + if ($code) return $code; + } catch (NetworkException $e) { + // ignore network errors + } catch (Exception $e) { + throw $e; + } + } + + throw new TimeoutException('Timeout ' . $timeout . ' seconds reached'); + } + + /** + * Sends captcha to '/in.php', and returns its `id` + * + * @param $captcha + * @return string + * @throws ApiException + * @throws NetworkException + * @throws ValidationException + */ + public function send($captcha) + { + $this->sendAttachDefaultParams($captcha); + + $files = $this->extractFiles($captcha); + + $this->mapParams($captcha, $captcha['method']); + $this->mapParams($files, $captcha['method']); + + $response = $this->apiClient->in($captcha, $files); + + if (mb_strpos($response, 'OK|') !== 0) { + throw new ApiException('Cannot recognise api response (' . $response . ')'); + } + + return mb_substr($response, 3); + } + + /** + * Returns result of captcha if it was solved or `null`, if result is not ready + * + * @param $id + * @return string|null + * @throws ApiException + * @throws NetworkException + */ + public function getResult($id) + { + $response = $this->res([ + 'action' => 'get', + 'id' => $id, + ]); + + if ($response == 'CAPCHA_NOT_READY') { + return null; + } + + if (mb_strpos($response, 'OK|') !== 0) { + throw new ApiException('Cannot recognise api response (' . $response . ')'); + } + + return mb_substr($response, 3); + } + + /** + * Gets account's balance + * + * @return float + * @throws ApiException + * @throws NetworkException + */ + public function balance() + { + $response = $this->res('getbalance'); + + return floatval($response); + } + + /** + * Reports if captcha was solved correctly (sends `reportbad` or `reportgood` to `/res.php`) + * + * @param $id + * @param $correct + * @throws ApiException + * @throws NetworkException + */ + public function report($id, $correct) + { + if ($correct) { + $this->res(['id' => $id, 'action' => 'reportgood']); + } else { + $this->res(['id' => $id, 'action' => 'reportbad']); + } + } + + /** + * Makes request to `/res.php` + * + * @param $query + * @return bool|string + * @throws ApiException + * @throws NetworkException + */ + private function res($query) + { + if (is_string($query)) { + $query = ['action' => $query]; + } + + $query['key'] = $this->apiKey; + + return $this->apiClient->res($query); + } + + /** + * Attaches default parameters (passed in constructor) to request + * + * @param $captcha + */ + private function sendAttachDefaultParams(&$captcha) + { + $captcha['key'] = $this->apiKey; + + if ($this->callback) { + if (!isset($captcha['callback'])) { + $captcha['callback'] = $this->callback; + } else if (!$captcha['callback']) { + unset($captcha['callback']); + } + } + + $this->lastCaptchaHasCallback = !empty($captcha['callback']); + + if ($this->softId and !isset($captcha['softId'])) { + $captcha['softId'] = $this->softId; + } + } + + /** + * Validates if files parameters are correct + * + * @param $captcha + * @param string $key + * @throws ValidationException + */ + private function requireFileOrBase64($captcha, $key = 'file') + { + if (!empty($captcha['base64'])) return; + + if (empty($captcha[$key])) { + throw new ValidationException('File required'); + } + + if (!file_exists($captcha[$key])) { + throw new ValidationException('File not found (' . $captcha[$key] . ')'); + } + } + + /** + * Turns `files` parameter into `file_1`, `file_2`, `file_n` parameters + * + * @param $captcha + * @throws ValidationException + */ + private function prepareFilesList(&$captcha) + { + $filesLimit = 9; + $i = 0; + + foreach ($captcha['files'] as $file) { + if (++$i > $filesLimit) { + throw new ValidationException('Too many files (max: ' . $filesLimit . ')'); + } + + if (!file_exists($file)) { + throw new ValidationException('File not found (' . $file . ')'); + } + + $captcha['file_' . $i] = $file; + } + + unset($captcha['files']); + } + + /** + * Extracts files into separate array + * + * @param $captcha + * @return array + */ + private function extractFiles(&$captcha) + { + $files = []; + + $fileKeys = ['file', 'hintImg']; + + for ($i = 1; $i < 10; $i++) { + $fileKeys[] = 'file_' . $i; + } + + foreach ($fileKeys as $key) { + if (!empty($captcha[$key]) and is_file($captcha[$key])) { + $files[$key] = $captcha[$key]; + unset($captcha[$key]); + } + } + + return $files; + } + + /** + * Turns passed parameters names into API-specific names + * + * @param $params + */ + private function mapParams(&$params, $method) + { + $map = $this->getParamsMap($method); + + foreach ($map as $new => $old) { + if (isset($params[$new])) { + $params[$old] = $params[$new]; + unset($params[$new]); + } + } + + if (isset($params['proxy'])) { + $proxy = $params['proxy']; + $params['proxy'] = $proxy['uri']; + $params['proxytype'] = $proxy['type']; + } + } + + /** + * Contains rules for `mapParams` method + * + * @param $method + * @return array + */ + private function getParamsMap($method) + { + $commonMap = [ + 'base64' => 'body', + 'caseSensitive' => 'regsense', + 'minLen' => 'min_len', + 'maxLen' => 'max_len', + 'hintText' => 'textinstructions', + 'hintImg' => 'imginstructions', + 'url' => 'pageurl', + 'score' => 'min_score', + 'text' => 'textcaptcha', + 'rows' => 'recaptcharows', + 'cols' => 'recaptchacols', + 'previousId' => 'previousID', + 'canSkip' => 'can_no_answer', + 'apiServer' => 'api_server', + 'softId' => 'soft_id', + 'callback' => 'pingback', + ]; + + $methodMap = [ + 'userrecaptcha' => [ + 'sitekey' => 'googlekey', + ], + 'funcaptcha' => [ + 'sitekey' => 'publickey', + ], + 'capy' => [ + 'sitekey' => 'captchakey', + ], + ]; + + if (isset($methodMap[$method])) { + return array_merge($commonMap, $methodMap[$method]); + } + + return $commonMap; + } + + /** + * Helper to determine if array is associative or not + * + * @param $arr + * @return bool + */ + private function isArrayAssoc($arr) + { + if (array() === $arr) return false; + return array_keys($arr) !== range(0, count($arr) - 1); + } +} diff --git a/2captcha-php/src/autoloader.php b/2captcha-php/src/autoloader.php new file mode 100644 index 0000000..6953a7e --- /dev/null +++ b/2captcha-php/src/autoloader.php @@ -0,0 +1,13 @@ +createMock(ApiClient::class); + + $data['sendParams']['key'] = $apiKey; + + $apiClient + ->expects($this->once()) + ->method('in') + ->with( + $this->equalTo($data['sendParams']), + $this->equalTo($data['sendFiles']) + ) + ->willReturn('OK|' . $captchaId); + + $apiClient + ->expects($this->once()) + ->method('res') + ->with($this->equalTo(['action' => 'get', 'id' => $captchaId, 'key' => $apiKey])) + ->willReturn('OK|' . $code); + + $solver = new TwoCaptcha([ + 'apiKey' => $apiKey, + 'pollingInterval' => 1, + ]); + + $solver->setHttpClient($apiClient); + + $result = $solver->{$this->method}($data['params']); + + $this->assertIsObject($result); + $this->assertObjectHasAttribute('code', $result); + $this->assertEquals($result->code, $code); + } + + /** + * Pass invalid file parameter to wrapper method + * in order to trigger ValidationException + */ + protected function checkIfExceptionThrownOnInvalidFile() + { + $this->expectException(ValidationException::class); + + $solver = new TwoCaptcha('API_KEY'); + + $result = $solver->{$this->method}([ + 'file' => 'non-existent-file', + ]); + } + + /** + * Pass invalid file parameter to wrapper method + * in order to trigger ValidationException + */ + protected function checkIfExceptionThrownOnTooManyFiles() + { + $this->expectException(ValidationException::class); + + $files = []; + + for ($i = 0; $i < 10; $i++) { + $files[] = __DIR__ . '/../../examples/images/rotate.jpg'; + } + + $solver = new TwoCaptcha('API_KEY'); + + $result = $solver->{$this->method}($files); + } +} diff --git a/2captcha-php/tests/CanvasTest.php b/2captcha-php/tests/CanvasTest.php new file mode 100644 index 0000000..cf5e941 --- /dev/null +++ b/2captcha-php/tests/CanvasTest.php @@ -0,0 +1,78 @@ +checkIfCorrectParamsSendAndResultReturned([ + // 'params' => $this->captchaImg, + // 'sendParams' => ['method' => 'post', 'canvas' => 1], + // 'sendFiles' => ['file' => $this->captchaImg], + // ]); + // } + + public function testSingleFileParameter() + { + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => ['file' => $this->captchaImg, 'hintText' => $this->hintText], + 'sendParams' => ['method' => 'post', 'canvas' => 1, 'recaptcha' => 1, 'textinstructions' => $this->hintText], + 'sendFiles' => ['file' => $this->captchaImg], + ]); + } + + public function testBase64() + { + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => ['base64' => '...', 'hintText' => $this->hintText], + 'sendParams' => ['method' => 'base64', 'canvas' => 1, 'body' => '...', 'recaptcha' => 1, 'textinstructions' => $this->hintText], + 'sendFiles' => [], + ]); + } + + public function testAllParameters() + { + $hintImg = __DIR__ . '/../examples/images/canvas_hint.jpg'; + + $params = [ + 'file' => $this->captchaImg, + 'previousId' => 0, + 'canSkip' => 0, + 'lang' => 'en', + 'hintImg' => $hintImg, + 'hintText' => $this->hintText, + ]; + + $sendParams = [ + 'method' => 'post', + 'canvas' => 1, + 'previousID' => 0, + 'can_no_answer' => 0, + 'lang' => 'en', + 'recaptcha' => 1, + 'textinstructions' => $this->hintText, + ]; + + $sendFiles = [ + 'file' => $this->captchaImg, + 'imginstructions' => $hintImg, + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $params, + 'sendParams' => $sendParams, + 'sendFiles' => $sendFiles, + ]); + } + + public function testNormalFileException() + { + $this->checkIfExceptionThrownOnInvalidFile(); + } +} diff --git a/2captcha-php/tests/CapyTest.php b/2captcha-php/tests/CapyTest.php new file mode 100644 index 0000000..129ae88 --- /dev/null +++ b/2captcha-php/tests/CapyTest.php @@ -0,0 +1,28 @@ + 'PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v', + 'url' => 'http://mysite.com/', + ]; + + $sendParams = [ + 'method' => 'capy', + 'captchakey' => 'PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v', + 'pageurl' => 'http://mysite.com/', + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $params, + 'sendParams' => $sendParams, + 'sendFiles' => [], + ]); + } +} diff --git a/2captcha-php/tests/CoordinatesTest.php b/2captcha-php/tests/CoordinatesTest.php new file mode 100644 index 0000000..42fd6e5 --- /dev/null +++ b/2captcha-php/tests/CoordinatesTest.php @@ -0,0 +1,72 @@ +checkIfCorrectParamsSendAndResultReturned([ + 'params' => $this->captchaImg, + 'sendParams' => ['method' => 'post', 'coordinatescaptcha' => 1], + 'sendFiles' => ['file' => $this->captchaImg], + ]); + } + + public function testSingleFileParameter() + { + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => ['file' => $this->captchaImg], + 'sendParams' => ['method' => 'post', 'coordinatescaptcha' => 1], + 'sendFiles' => ['file' => $this->captchaImg], + ]); + } + + public function testBase64() + { + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => ['base64' => '...'], + 'sendParams' => ['method' => 'base64', 'coordinatescaptcha' => 1, 'body' => '...'], + 'sendFiles' => [], + ]); + } + + public function testAllParameters() + { + $hintImg = __DIR__ . '/../examples/images/grid_hint.jpg'; + + $params = [ + 'file' => $this->captchaImg, + 'lang' => 'en', + 'hintImg' => $hintImg, + 'hintText' => 'Select all images with an Orange', + ]; + + $sendParams = [ + 'method' => 'post', + 'coordinatescaptcha' => 1, + 'lang' => 'en', + 'textinstructions' => 'Select all images with an Orange', + ]; + + $sendFiles = [ + 'file' => $this->captchaImg, + 'imginstructions' => $hintImg, + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $params, + 'sendParams' => $sendParams, + 'sendFiles' => $sendFiles, + ]); + } + + public function testNormalFileException() + { + $this->checkIfExceptionThrownOnInvalidFile(); + } +} diff --git a/2captcha-php/tests/FunCaptchaTest.php b/2captcha-php/tests/FunCaptchaTest.php new file mode 100644 index 0000000..363b08a --- /dev/null +++ b/2captcha-php/tests/FunCaptchaTest.php @@ -0,0 +1,38 @@ + '69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC', + 'url' => 'https://mysite.com/page/with/funcaptcha', + 'surl' => 'https://client-api.arkoselabs.com', + 'userAgent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36', + 'data' => [ + 'anyKey' => 'anyStringValue', + ], + ]; + + $sendParams = [ + 'method' => 'funcaptcha', + 'publickey' => '69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC', + 'pageurl' => 'https://mysite.com/page/with/funcaptcha', + 'surl' => 'https://client-api.arkoselabs.com', + 'userAgent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36', + 'data' => [ + 'anyKey' => 'anyStringValue', + ], + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $params, + 'sendParams' => $sendParams, + 'sendFiles' => [], + ]); + } +} diff --git a/2captcha-php/tests/GeeTest.php b/2captcha-php/tests/GeeTest.php new file mode 100644 index 0000000..928204e --- /dev/null +++ b/2captcha-php/tests/GeeTest.php @@ -0,0 +1,32 @@ + 'f2ae6cadcf7886856696502e1d55e00c', + 'apiServer' => 'api-na.geetest.com', + 'challenge' => '69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC', + 'url' => 'https://launches.endclothing.com/distil_r_captcha.html', + ]; + + $sendParams = [ + 'method' => 'geetest', + 'gt' => 'f2ae6cadcf7886856696502e1d55e00c', + 'api_server' => 'api-na.geetest.com', + 'challenge' => '69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC', + 'pageurl' => 'https://launches.endclothing.com/distil_r_captcha.html', + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $params, + 'sendParams' => $sendParams, + 'sendFiles' => [], + ]); + } +} diff --git a/2captcha-php/tests/GridTest.php b/2captcha-php/tests/GridTest.php new file mode 100644 index 0000000..2a4d1ff --- /dev/null +++ b/2captcha-php/tests/GridTest.php @@ -0,0 +1,79 @@ +checkIfCorrectParamsSendAndResultReturned([ + 'params' => $this->captchaImg, + 'sendParams' => ['method' => 'post'], + 'sendFiles' => ['file' => $this->captchaImg], + ]); + } + + public function testSingleFileParameter() + { + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => ['file' => $this->captchaImg], + 'sendParams' => ['method' => 'post'], + 'sendFiles' => ['file' => $this->captchaImg], + ]); + } + + public function testBase64() + { + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => ['base64' => '...'], + 'sendParams' => ['method' => 'base64', 'body' => '...'], + 'sendFiles' => [], + ]); + } + + public function testAllParameters() + { + $hintImg = __DIR__ . '/../examples/images/grid_hint.jpg'; + + $params = [ + 'file' => $this->captchaImg, + 'rows' => 3, + 'cols' => 3, + 'previousId' => 0, + 'canSkip' => 0, + 'lang' => 'en', + 'hintImg' => $hintImg, + 'hintText' => 'Select all images with an Orange', + ]; + + $sendParams = [ + 'method' => 'post', + 'recaptcharows' => 3, + 'recaptchacols' => 3, + 'previousID' => 0, + 'can_no_answer' => 0, + 'lang' => 'en', + 'textinstructions' => 'Select all images with an Orange', + ]; + + $sendFiles = [ + 'file' => $this->captchaImg, + 'imginstructions' => $hintImg, + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $params, + 'sendParams' => $sendParams, + 'sendFiles' => $sendFiles, + ]); + } + + public function testNormalFileException() + { + $this->checkIfExceptionThrownOnInvalidFile(); + } +} diff --git a/2captcha-php/tests/HCaptchaTest.php b/2captcha-php/tests/HCaptchaTest.php new file mode 100644 index 0000000..dcc49c3 --- /dev/null +++ b/2captcha-php/tests/HCaptchaTest.php @@ -0,0 +1,28 @@ + 'f1ab2cdefa3456789012345b6c78d90e', + 'url' => 'https://www.site.com/page/', + ]; + + $sendParams = [ + 'method' => 'hcaptcha', + 'sitekey' => 'f1ab2cdefa3456789012345b6c78d90e', + 'pageurl' => 'https://www.site.com/page/', + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $params, + 'sendParams' => $sendParams, + 'sendFiles' => [], + ]); + } +} diff --git a/2captcha-php/tests/KeyCaptchaTest.php b/2captcha-php/tests/KeyCaptchaTest.php new file mode 100644 index 0000000..c1b57c2 --- /dev/null +++ b/2captcha-php/tests/KeyCaptchaTest.php @@ -0,0 +1,34 @@ + 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/', + ]; + + $sendParams = [ + 'method' => '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', + 'pageurl' => 'https://www.keycaptcha.ru/demo-magnetic/', + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $params, + 'sendParams' => $sendParams, + 'sendFiles' => [], + ]); + } +} diff --git a/2captcha-php/tests/NormalTest.php b/2captcha-php/tests/NormalTest.php new file mode 100644 index 0000000..e04c9f3 --- /dev/null +++ b/2captcha-php/tests/NormalTest.php @@ -0,0 +1,83 @@ +checkIfCorrectParamsSendAndResultReturned([ + 'params' => $this->captchaImg, + 'sendParams' => ['method' => 'post'], + 'sendFiles' => ['file' => $this->captchaImg], + ]); + } + + public function testSingleFileParameter() + { + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => ['file' => $this->captchaImg], + 'sendParams' => ['method' => 'post'], + 'sendFiles' => ['file' => $this->captchaImg], + ]); + } + + public function testBase64() + { + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => ['base64' => '...'], + 'sendParams' => ['method' => 'base64', 'body' => '...'], + 'sendFiles' => [], + ]); + } + + public function testAllParameters() + { + $hintImg = __DIR__ . '/../examples/images/grid_hint.jpg'; + + $params = [ + 'file' => $this->captchaImg, + 'numeric' => 4, + 'minLen' => 4, + 'maxLen' => 20, + 'phrase' => 1, + 'caseSensitive' => 1, + 'calc' => 0, + 'lang' => 'en', + 'hintImg' => $hintImg, + 'hintText' => 'Type red symbols only', + ]; + + $sendParams = [ + 'method' => 'post', + 'numeric' => 4, + 'min_len' => 4, + 'max_len' => 20, + 'phrase' => 1, + 'regsense' => 1, + 'calc' => 0, + 'lang' => 'en', + 'textinstructions' => 'Type red symbols only', + ]; + + $sendFiles = [ + 'file' => $this->captchaImg, + 'imginstructions' => $hintImg, + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $params, + 'sendParams' => $sendParams, + 'sendFiles' => $sendFiles, + ]); + } + + public function testNormalFileException() + { + $this->checkIfExceptionThrownOnInvalidFile(); + } +} diff --git a/2captcha-php/tests/ReCaptchaTest.php b/2captcha-php/tests/ReCaptchaTest.php new file mode 100644 index 0000000..d703e3b --- /dev/null +++ b/2captcha-php/tests/ReCaptchaTest.php @@ -0,0 +1,64 @@ + '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + 'url' => 'https://mysite.com/page/with/recaptcha', + 'invisible' => 1, + 'action' => 'verify', + 'proxy' => [ + 'type' => 'HTTPS', + 'uri' => 'username:str0ngP@$$W0rd@1.2.3.4:4321', + ] + ]; + + $sendParams = [ + 'method' => 'userrecaptcha', + 'googlekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + 'pageurl' => 'https://mysite.com/page/with/recaptcha', + 'invisible' => 1, + 'action' => 'verify', + 'proxy' => 'username:str0ngP@$$W0rd@1.2.3.4:4321', + 'proxytype' => 'HTTPS' + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $params, + 'sendParams' => $sendParams, + 'sendFiles' => [], + ]); + } + + public function testV3() + { + $params = [ + 'sitekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + 'url' => 'https://mysite.com/page/with/recaptcha', + 'version' => 'v3', + 'action' => 'verify', + 'score' => 0.3, + ]; + + $sendParams = [ + 'method' => 'userrecaptcha', + 'googlekey' => '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-', + 'pageurl' => 'https://mysite.com/page/with/recaptcha', + 'version' => 'v3', + 'action' => 'verify', + 'min_score' => 0.3, + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $params, + 'sendParams' => $sendParams, + 'sendFiles' => [], + ]); + } +} diff --git a/2captcha-php/tests/RotateTest.php b/2captcha-php/tests/RotateTest.php new file mode 100644 index 0000000..0aae47b --- /dev/null +++ b/2captcha-php/tests/RotateTest.php @@ -0,0 +1,113 @@ +checkIfCorrectParamsSendAndResultReturned([ + 'params' => $this->img, + 'sendParams' => ['method' => 'rotatecaptcha'], + 'sendFiles' => ['file_1' => $this->img], + ]); + } + + public function testSingleFileParameter() + { + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => ['file' => $this->img], + 'sendParams' => ['method' => 'rotatecaptcha'], + 'sendFiles' => ['file_1' => $this->img], + ]); + } + + public function testFilesList() + { + $files = [ + $this->img, + $this->img2, + $this->img3, + ]; + + $sendFiles = [ + 'file_1' => $this->img, + 'file_2' => $this->img2, + 'file_3' => $this->img3, + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $files, + 'sendParams' => ['method' => 'rotatecaptcha'], + 'sendFiles' => $sendFiles, + ]); + } + + public function testFilesListParameter() + { + $files = [ + $this->img, + $this->img2, + $this->img3, + ]; + + $sendFiles = [ + 'file_1' => $this->img, + 'file_2' => $this->img2, + 'file_3' => $this->img3, + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => ['files' => $files], + 'sendParams' => ['method' => 'rotatecaptcha'], + 'sendFiles' => $sendFiles, + ]); + } + + public function testAllParameters() + { + $hintImg = __DIR__ . '/../examples/images/grid_hint.jpg'; + + $params = [ + 'file' => $this->img, + 'angle' => 40, + 'lang' => 'en', + 'hintImg' => $hintImg, + 'hintText' => 'Put the images in the correct way up', + ]; + + $sendParams = [ + 'method' => 'rotatecaptcha', + 'angle' => 40, + 'lang' => 'en', + 'textinstructions' => 'Put the images in the correct way up', + ]; + + $sendFiles = [ + 'file_1' => $this->img, + 'imginstructions' => $hintImg, + ]; + + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => $params, + 'sendParams' => $sendParams, + 'sendFiles' => $sendFiles, + ]); + } + + public function testInvalidFileException() + { + $this->checkIfExceptionThrownOnInvalidFile(); + } + + public function testTooManyFilesException() + { + $this->checkIfExceptionThrownOnTooManyFiles(); + } +} diff --git a/2captcha-php/tests/TextTest.php b/2captcha-php/tests/TextTest.php new file mode 100644 index 0000000..e6c19fd --- /dev/null +++ b/2captcha-php/tests/TextTest.php @@ -0,0 +1,35 @@ +checkIfCorrectParamsSendAndResultReturned([ + 'params' => 'Today is monday?', + 'sendParams' => ['method' => 'post', 'textcaptcha' => 'Today is monday?'], + 'sendFiles' => [], + ]); + } + + public function testTextParameter() + { + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => ['text' => 'Today is monday?'], + 'sendParams' => ['method' => 'post', 'textcaptcha' => 'Today is monday?'], + 'sendFiles' => [], + ]); + } + + public function testAllParameters() + { + $this->checkIfCorrectParamsSendAndResultReturned([ + 'params' => ['text' => 'Today is monday?', 'lang' => 'en'], + 'sendParams' => ['method' => 'post', 'textcaptcha' => 'Today is monday?', 'lang' => 'en'], + 'sendFiles' => [], + ]); + } +} diff --git a/2captcha-php/tests/autoloader.php b/2captcha-php/tests/autoloader.php new file mode 100644 index 0000000..05a80c5 --- /dev/null +++ b/2captcha-php/tests/autoloader.php @@ -0,0 +1,14 @@ + + +Everyone is permitted to copy and distribute verbatim or modified +copies of this license document, and changing it is allowed as long +as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/README.md b/README.md new file mode 100644 index 0000000..3201b23 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# MCBBSAutoSignIn +MCBBS自动签到脚本 + +----------------------------- +代码使用2Captcha服务来过极验验证 + +[网址](2captcha.com) +``` +// 2Captcha的api_key,用于过极验验证 +$api_key = ""; +// mcbbs的cookie +$cookie = ""; +``` +api_key和cookie自行填入 diff --git a/Sign.php b/Sign.php new file mode 100644 index 0000000..fe03555 --- /dev/null +++ b/Sign.php @@ -0,0 +1,199 @@ +challenge; + // $challenge = explode(";", $resp)[0]; + + // Then we are ready to make a call to 2captcha API + $flag = 0; + $error = null; + + try { + $result = $solver->geetest([ + 'gt' => 'c4c41e397ee921e9862d259da2a031c4', + 'apiServer' => 'api.geetest.com', + 'challenge' => $challenge, + 'url' => 'https://www.mcbbs.net/plugin.php?id=dc_signin', + ]); + } catch (\Exception $e) { + print_r($e->getMessage()); + $error = $e->getMessage(); + $flag ++; + } + }while($flag < 10 && $error == "ERROR_CAPTCHA_UNSOLVABLE"); + + + $data = json_decode($result->code,true); + return $data; + +} + +function getFormHash(string $cookie) { + $data = get("https://www.mcbbs.net/home.php?mod=spacecp&inajax=1",$cookie); + preg_match("//",$data,$match); + if(!isset($match[1])){ + return false; + } + return $match[1]; +} + +function get(string $url,string $cookie,array $header = null){ + $c = curl_init(); + curl_setopt($c,CURLOPT_URL,$url); + curl_setopt($c,CURLOPT_COOKIE,$cookie); + curl_setopt($c, CURLOPT_HEADER, 0); + curl_setopt($c,CURLOPT_SSL_VERIFYPEER,false); + curl_setopt($c,CURLOPT_RETURNTRANSFER,true); + curl_setopt($c,CURLOPT_HTTPHEADER, [ + "Referer: https://www.mcbbs.net/plugin.php?id=dc_signin", + "Connection: closed", + "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" + ]); + if(!is_null($header)) { + curl_setopt($c,CURLOPT_HTTPHEADER, $header); + } + $x = curl_exec($c); + curl_close($c); + return $x; +} +function post(string $url,string $cookie, array $data,array $header = null) { + $c = curl_init(); + curl_setopt($c,CURLOPT_URL,$url); + curl_setopt($c,CURLOPT_COOKIE,$cookie); + curl_setopt($c, CURLOPT_HEADER, 0); + curl_setopt($c,CURLOPT_SSL_VERIFYPEER,false); + curl_setopt($c,CURLOPT_RETURNTRANSFER,true); + curl_setopt($c, CURLOPT_POST, 1); + curl_setopt($c,CURLOPT_HTTPHEADER, [ + "Referer: https://www.mcbbs.net/plugin.php?id=dc_signin", + "Connection: closed", + "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" + ]); + if(!is_null($header)) { + curl_setopt($c,CURLOPT_HTTPHEADER, $header); + } + curl_setopt($c, CURLOPT_POSTFIELDS, $data); + $x = curl_exec($c); + curl_close($c); + return $x; +} + +function checkSignIn (string $cookie) { + $signUrl = "https://www.mcbbs.net/plugin.php?id=dc_signin:sign&inajax=1"; + $check = get($signUrl, $cookie); + if(!$check || preg_match("/您今日已经签过到/",$check)) { + return true; + } + return false; +} + +function signIn(string $cookie, string $emote,string $content,array $chal) { + $signUrl = "https://www.mcbbs.net/plugin.php?id=dc_signin:sign&inajax=1"; + $hash = getFormHash($cookie); + if(!$hash){return false;} + $result = post($signUrl, $cookie, [ + "formhash" => $hash, + "signsubmit" => "yes", + "handlekey" => "signin", + "emotid" => $emote, + "referer" => "https://www.mcbbs.net/plugin.php?id=dc_signin", + "content" => $content, + "geetest_challenge" => $chal['geetest_challenge'], + "geetest_validate" => $chal['geetest_validate'], + "geetest_seccode" => $chal['geetest_seccode'] + ]); + if(!preg_match("/签到成功/",$result)){ + echo $result.PHP_EOL; + $res1[] = false; + $res1[] = $result; + return $res1; + } + $res2[] = true; + $res2[] = $result; + return $res2; +} + +function sc_send( $text , $desp = '' , $key = '[SENDKEY]' ) +{ + $data = array( + 'text' => $text, + 'desp' => $desp + ); + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, 'https://sctapi.ftqq.com/'.$key.'.send'); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); + + $headers = array(); + $headers[] = 'Content-type: application/x-www-form-urlencoded'; + + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + + $resp = curl_exec($ch); + if (curl_errno($ch)) { + echo 'Error:' . curl_error($ch); + } + curl_close($ch); + + return $resp; +}