Skip to content

Zaczero/2Captcha

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

74 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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 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