Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Zaczero/2Captcha logo

Build Status Github Release NuGet Release License

Simple HTTP API wrapper for 2captcha.com
An online captcha solving and image recognition service.

By using this library you will get 10% cashback on captchas you solve.

🌀️ Installation

Install with NuGet (recommended)

Install-Package 2CaptchaAPI

Install with dotnet

dotnet add PROJECT package 2CaptchaAPI

Install manually

Browse latest GitHub release

🏁 Getting started

Sample code

/*
 * Class initialization
 * Optionally you can pass 2nd parameter `httpClient` with custom HttpClient to use while requesting API
 */
var captcha = new _2Captcha("API_KEY");
var captchaCustomHttp = new _2Captcha("API_KEY", new HttpClient());

/*
 * Set custom API url (optional)
 */
captcha.SetApiUrl("https://CUSTOM_URL");

/*
 * Get current balance
 */
var balance = await captcha.GetBalance();

/*
 * Type: Image
 *
 * Documentation (2captcha): https://2captcha.com/2captcha-api#solving_normal_captcha
 */
var image = await captcha.SolveImage(new FileStream("captcha.png", FileMode.Open), FileType.Png);
var image2 = await captcha.SolveImage(File.ReadAllBytes("captcha.png"), FileType.Png);
var image3 = await captcha.SolveImage("BASE64_IMAGE", FileType.Png);

var imageCaseSensitive = await captcha.SolveImage(new FileStream("captcha.png", FileMode.Open), FileType.Png, new KeyValuePair<string, string>("regsense", "1"));
var imageCaseSensitive2 = await captcha.SolveImage(File.ReadAllBytes("captcha.png"), FileType.Png, new KeyValuePair<string, string>("regsense", "1"));
var imageCaseSensitive3 = await captcha.SolveImage("BASE64_IMAGE", FileType.Png, new KeyValuePair<string, string>("regsense", "1"));

/*
 * Type: Text
 *
 * Documentation (2captcha): https://2captcha.com/2captcha-api#solving_text_captcha
 */
var question = await captcha.SolveQuestion("1 + 3 = ?");

/*
 * Type: ReCaptcha V2
 * Optionally you can pass 3rd parameter `isInvisible` to indicate if the reCaptcha is setup as invisible
 *
 * Homepage: https://www.google.com/recaptcha/
 * Documentation (vendor): https://developers.google.com/recaptcha/docs/display
 * Documentation (2captcha): https://2captcha.com/2captcha-api#solving_recaptchav2_new
 */
var reCaptcha = await captcha.SolveReCaptchaV2("SITE_KEY", "https://WEBSITE_URL");
var reCaptchaInvisible = await captcha.SolveReCaptchaV2("SITE_KEY", "https://WEBSITE_URL", true);
var reCaptchaWithProxy = await captcha.SolveReCaptchaV2("SITE_KEY", "https://WEBSITE_URL", "username:password@address:port", ProxyType.Http);

/*
 * Type: ReCaptcha V3
 *
 * Homepage: https://www.google.com/recaptcha/
 * Documentation (vendor): https://developers.google.com/recaptcha/docs/v3
 * Documentation (2captcha): https://2captcha.com/2captcha-api#solving_recaptchav3
 */
var reCaptchaV3 = await captcha.SolveReCaptchaV3("SITE_KEY", "https://WEBSITE_URL", "ACTION", 0.4);
var reCaptchaV3WithProxy = await captcha.SolveReCaptchaV3("SITE_KEY", "https://WEBSITE_URL", "username:password@address:port", ProxyType.Http, "ACTION", 0.4);

/*
 * Type: hCaptcha
 *
 * Homepage: https://www.hcaptcha.com/
 * Documentation (vendor): https://docs.hcaptcha.com/
 * Documentation (2captcha): https://2captcha.com/2captcha-api#solving_hcaptcha
 */
var hCaptcha = await captcha.SolveHCaptcha("SITE_KEY", "https://WEBSITE_URL");
var hCaptchaWithProxy = await captcha.SolveHCaptcha("SITE_KEY", "https://WEBSITE_URL", "username:password@address:port", ProxyType.Http);

/*
 * Type: GeeTest
 *
 * Homepage: https://www.geetest.com/en
 * Documentation (vendor): https://docs.geetest.com/en
 * Documentation (2captcha): https://2captcha.com/2captcha-api#solving_geetest
 */
var geeTest = await captcha.SolveGeeTest("SITE_KEY", "https://WEBSITE_URL", "CHALLENGE");

/*
 * Type: ClickCaptcha
 *
 * Documentation (2captcha): https://2captcha.com/2captcha-api#solving_clickcaptcha
 */
var clickCaptcha = await captcha.SolveClickCaptcha(new FileStream("captcha.png", FileMode.Open), FileType.Png, "TASK");
var clickCaptcha2 = await captcha.SolveClickCaptcha(File.ReadAllBytes("captcha.png"), FileType.Png, "TASK");
var clickCaptcha3 = await captcha.SolveClickCaptcha("BASE64_IMAGE", FileType.Png, "TASK");

/*
 * Type: RotateCaptcha
 *
 * Documentation (2captcha): https://2captcha.com/2captcha-api#solving_rotatecaptcha
 */
var rotateCaptcha = await captcha.SolveRotateCaptcha(
    new Stream[]
    {
        new FileStream("captcha1.png", FileMode.Open),
        new FileStream("captcha2.png", FileMode.Open),
        new FileStream("captcha3.png", FileMode.Open),
    }, FileType.Png, "40");

/*
 * Type: FunCaptcha
 *
 * Documentation (2captcha): https://2captcha.com/2captcha-api#solving_funcaptcha_new
 */
var funCaptcha = await captcha.SolveFunCaptcha("PUBLIC_KEY", "https://WEBSITE_URL");
var funCaptchaNoJavaScript = await captcha.SolveFunCaptcha("PUBLIC_KEY", "https://WEBSITE_URL", true);
var funCaptchaWithProxy = await captcha.SolveFunCaptcha("PUBLIC_KEY", "https://WEBSITE_URL", "username:password@address:port", ProxyType.Http);

/*
 * Type: KeyCaptcha
 *
 * Homepage: https://www.keycaptcha.com/
 * Documentation (2captcha): https://2captcha.com/2captcha-api#solving_keycaptcha
 */
var keyCaptcha = await captcha.SolveKeyCaptcha("USER_ID", "SESSION_ID", "WEB_SIGN_1", "WEB_SIGN_2", "https://WEBSITE_URL");

And here is the result structure (the same for all methods)

public struct Result
{
    public readonly bool Success;
    public readonly JToken ResponseObject;

    public string ResponseJson;
    public string Response;
    public double ResponseDouble;
    public Coordinates[] ResponseCoordinates;
}

Footer

πŸ“§ Contact

πŸ“ƒ License