C# và 2captcha - Tích hợp giúp giải mã recaptcha
C#
28
bypass
5
White

Alex viết ngày 09/01/2020

Mã C# - trình bao bọc API 2captcha.

Để hiểu rõ hơn về cách sử dụng dịch vụ 2captcha, bạn có thể đọc bài “Python - cầu nối giúp giải mã reCaptcha v2.0 bằng dịch vụ 2captcha”.

using System.IO;    
using System;
using System.Net;
using System.Text;

class Recaptcha2captcha
{    
    private static string captcha_service_key;
    private string site_key;
    private string page_url;

    public void setServiceKey(string service_key)
    {        
        Recaptcha2captcha.captcha_service_key = service_key;
    }
    public void setSiteKey(string site_key)
    {
        this.site_key = site_key;
    }
    public void setPageUrl(string page_url)
    {
        this.page_url = page_url;
    }

    public string SendRequest() // HTTP POST
    {
        try
        {
            System.Net.ServicePointManager.Expect100Continue = false;
            var request = (HttpWebRequest)WebRequest.Create("http://2captcha.com/in.php");

            var postData = "key="+ Recaptcha2captcha.captcha_service_key +"&method=userrecaptcha&googlekey=" + this.site_key + "&page_url=" + this.page_url;
            var data = Encoding.ASCII.GetBytes(postData);

            request.Method = "POST";

            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;

            using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            var response = (HttpWebResponse)request.GetResponse();

            var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
            response.Close();
            if (responseString.Contains("OK|"))
            {
                return responseString;
            }
            else
            {
                return "2captcha service return error. Error code:" + responseString;
            }
        }
        catch (Exception e)
        {
            return e.Message;
        }

    }
    public string SubmitForm(string RecaptchaResponseToken)  // HTTP POST
    {
        // var page_url = "http://testing-ground.scraping.pro/recaptcha";
        try
        {
            System.Net.ServicePointManager.Expect100Continue = false;
            var request = (HttpWebRequest)WebRequest.Create(this.page_url);

            var postData = "submit=submin&g-recaptcha-response="  + RecaptchaResponseToken;
            var data = Encoding.ASCII.GetBytes(postData);

            request.Method = "POST";

            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;

            using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            var response = (HttpWebResponse)request.GetResponse();

            var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
            response.Close();
            return responseString;
        }
        catch (Exception e)
        {
            return e.Message;
        }

    }

    // the request to retrieve g-recaptcha-response token from 2captcha service
    public string getToken(string captcha_id)  // HTTP GET
    {
        WebClient webClient = new WebClient();
        webClient.QueryString.Add("key", Recaptcha2captcha.captcha_service_key);
        webClient.QueryString.Add("action", "get");
        webClient.QueryString.Add("id", captcha_id);

        return webClient.DownloadString("http://2captcha.com/res.php");
    }
    // validate site with returned token thru proxy.php  
    public string getValidate(string token)
    {
        WebClient webClient = new WebClient();
        webClient.QueryString.Add("response", token);
        return webClient.DownloadString("http://testing-ground.scraping.pro/proxy.php");
    }
}

class Program
{
    static void Main(string[] args)
    {  
        if (args.Length != 1)
        {
            System.Console.WriteLine("Usage: main.exe <2captcha_service_key>");
            return;
        }
        string service_key = args[0];
        // Console.WriteLine("2captcha service key: " + service_key);

        Recaptcha2captcha service = new Recaptcha2captcha();

        // we set 2captcha service key and target google site_key
        service.setServiceKey(service_key);
        service.setSiteKey("6Lf5CQkTAAAAAKA-kgNm9mV6sgqpGmRmRMFJYMz8");
        serivce.service.setPageUrl("http://testing-ground.scraping.pro/recaptcha");

        var resp = service.SendRequest();
        var gcaptchaToken = "";
        Console.WriteLine(resp.Substring( 3, resp.Length-3));
        if (resp.Contains("OK|")){
            // loop till the service solves captcha and gets g-recaptcha-response token
            var i=0;
            while (i++ <= 20)
            {
                System.Threading.Thread.Sleep(5000); // sleep 5 seconds
                Console.WriteLine("Captcha is being solved for {0} seconds", i*5);
                gcaptchaToken = service.getToken(resp.Substring( 3, resp.Length-3));
                if (gcaptchaToken.Contains("OK|"))
                {
                    break;
                }
            }


            if (gcaptchaToken.Contains("OK|"))
            {
                var RecaptchaResponseToken = gcaptchaToken.Substring(3, gcaptchaToken.Length-3);
                Console.WriteLine("g-recaptcha-response token:  " + RecaptchaResponseToken );

                // make google to validate g-recaptcha-response token
                var iSvalid = service.getValidate(RecaptchaResponseToken);
                Console.WriteLine("Token is validated by google: " + iSvalid );

                // submit form to the target site
                var SubmitFormResp = service.SubmitForm(RecaptchaResponseToken);
                Console.WriteLine("Submit form return: " + SubmitFormResp );

            } else {
                Console.WriteLine("Captcha has not been solved. Error code: " + gcaptchaToken);
                //Environment.Exit(0);
            }

        } else {
            Console.WriteLine("Error: " + resp);
            //Environment.Exit(0);
        }
        Console.Read();
    }
}   

2captcha 09-01-2020

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Alex

6 bài viết.
2 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
4 0
Sử dụng 2Captcha và Puppeteer giúp tự động hóa "vượt tường" CAPTCHA Trong khoảng hơn một thập kỷ trở lại đây, Captcha đã trở nên quen thuộc ở khắp...
Alex viết 8 tháng trước
4 0
White
3 0
Một câu chuyện rất đỗi quen thuộc và thường diễn ra như sau: Sam cần phải điền vào các biểu mẫu tự động. Nó có thể dành cho các mục đích khác nhau...
Alex viết 8 tháng trước
3 0
White
2 0
Đúng như tên gọi của mình, Captcha (Completely Automated Public Turing test to tell Computers and Humans Apart) được sử dụng để phân biệt Con người...
Alex viết 7 tháng trước
2 0
Bài viết liên quan
White
0 0
Mình khá là lười, nên mình sẽ không đưa định nghĩa hay usage của reflection vào đây. Vì dù sao mình cũng sẽ chỉ copy thôi :smile:. Vậy nên chúng ta...
Rice viết gần 2 năm trước
0 0
White
26 4
Tạo dummy data với Faker và Mockaroo – Xa rồi những ngày nhập tay nhàm chán Cuộc đời một thằng developer có rất nhiều việc rất chán nhưng phải làm...
Huy Hoàng Phạm viết gần 5 năm trước
26 4
Male avatar
5 2
Sử dụng OpenCV function với C.Net Nếu bạn đã từng làm một số project có liên quan đến xử lý ảnh thì chắc hẳn sẽ biết thư viện OpenCV. Hiện tại đã ...
vankhangfet viết gần 5 năm trước
5 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
6 bài viết.
2 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!