Lập trình Http Request với C#

Lập trình Http Request với C#

Vượt recapthca với C# dùng Http Request Vượt recapthca với C# dùng Http Request Vượt recapthca với C# dùng Http Request Vượt recapthca với C# dùng Http Request Vượt recapthca với C# dùng Http Request 0/5 (4 reviews)

Vượt recapthca với C# dùng Http Request

Đã đăng 2018-10-11 09:10:54 bởi Kteam
0 bình luận 597 lượt xem
Vượt recapthca với C# dùng Http Request 0 /5 stars (0 reviews)
 

Dẫn nhập

Chào mừng các bạn đến với khóa học LẬP TRÌNH HTTP REQUEST VỚI C#, khóa học đầu tiên trong cụm khóa học về Auto C# của Howkteam. Mục đích hướng tới là các bạn có thể làm auto bằng C# mà không cần dùng tới các ngôn ngữ như AutoIT, C++,…

Ở bài trước chúng ta đã tìm hiểu về cách VƯỢT NORMAL CAPTCHA VTC VỚI C# DÙNG HTTP REQUEST. Trong bài này chúng ta sẽ tiếp tục tìm hiểu cách Vượt recapthca với C# dùng Http Request


Nội dung 

Nội dung bao gồm Source code & các lưu ý chính về quá trình thực hiện phần mềm. Kteam khuyến khích bạn cập nhập thêm nhiều kinh nghiệm cũng như hiểu chi tiết hơn về các kỹ thuật được đề cập trong bài học thông qua các video đính kèm.

Đừng quên Like Facebook hoặc +1 Google để ủng hộ Kteam và tác giả.

Để có đủ khả năng học hiểu các nội dung được đề cập đến trong khóa học. Bạn nên có tối thiểu kiến thức về các phần:

Ngoài ra, cũng nên trau dồi thêm kiến thức khác qua các project thực tế như:


Phần mềm sử dụng

Để việc thao tác theo hướng dẫn được tốt nhất bạn nên cài đặt các phần mềm


Project tham khảo

Form1.cs

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using xNet;

namespace HttpRequest_Bai1_GetDataFrom_HowKteam
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        #region Kteam code
        void AddCookie(HttpRequest http, string cookie)
        {
            var temp = cookie.Split(';');
            foreach (var item in temp)
            {
                var temp2 = item.Split('=');
                if (temp2.Count() > 1)
                {
                    http.Cookies.Add(temp2[0], temp2[1]);
                }
            }
        }

        string GetData(string url, HttpRequest http = null, string userArgent = "", string cookie = null)
        {
            if (http == null)
            {
                http = new HttpRequest();
                http.Cookies = new CookieDictionary();
            }

            if (!string.IsNullOrEmpty(cookie))
            {
                AddCookie(http, cookie);
            }

            if (!string.IsNullOrEmpty(userArgent))
            {
                http.UserAgent = userArgent;
            }
            string html = http.Get(url).ToString();
            return html;
        }

        string GetLoginDataToken(string html)
        {
            string token = "";

            var res = Regex.Matches(html, @"(?<=__RequestVerificationToken"" type=""hidden"" value="").*?(?="")", RegexOptions.Singleline);

            if (res != null && res.Count > 0)
            {
                token = res[1].ToString();
            }

            return token;
        }

        string GetVTCToken(string html)
        {
            string token = "";

            var res = Regex.Matches(html, @"(?<=__RequestVerificationToken"" type=""hidden"" value="").*?(?="")", RegexOptions.Singleline);

            if (res != null && res.Count > 0)
            {
                token = res[0].ToString();
            }

            return token;
        }

        string GetThayTrucTuyenToken(string html)
        {
            string token = "";

            var res = Regex.Matches(html, @"(?<=__RequestVerificationToken"" type=""hidden"" value="").*?(?="")", RegexOptions.Singleline);

            if (res != null && res.Count > 0)
            {
                token = res[0].ToString();
            }

            return token;
        }

        string PostData(HttpRequest http, string url, string data = null, string contentType = null, string userArgent = "", string cookie = null)
        {
            if (http == null)
            {
                http = new HttpRequest();
                http.Cookies = new CookieDictionary();
            }

            if (!string.IsNullOrEmpty(cookie))
            {
                AddCookie(http, cookie);
            }

            if (!string.IsNullOrEmpty(userArgent))
            {
                http.UserAgent = userArgent;
            }

            string html = http.Post(url, data, contentType).ToString();
            return html;
        }

        string UploadData(HttpRequest http, string url, MultipartContent data = null, string contentType = null, string userArgent = "", string cookie = null)
        {
            if (http == null)
            {
                http = new HttpRequest();
                http.Cookies = new CookieDictionary();
            }

            if (!string.IsNullOrEmpty(cookie))
            {
                AddCookie(http, cookie);
            }

            if (!string.IsNullOrEmpty(userArgent))
            {
                http.UserAgent = userArgent;
            }

            string html = http.Post(url, data).ToString();
            return html;
        }

        /// <summary>
        /// https://uploadfiles.io
        /// https://up.uploadfiles.io/upload
        /// {"status":true,"id":2830220,"url":"https:\/\/ufile.io\/bzu2r","destination":"https:\/\/uploadfiles.io\/bzu2r","name":"baner.png","filename":"bzu2r-baner.png","slug":"bzu2r","size":"131.2 KB","type":"image","expiry":"4 Weeks","session_id":"0a474824369a95008b21c963ef90f62a3d9aee8c","timing":"1538645128-1538645128"}
        /// </summary>
        /// <param name="path"></param>
        void UploadFile(string path)
        {
            MultipartContent data = new MultipartContent() {
                { new StringContent("dzuuid"), "cf45eb6a-834d-44f0-af1e-c6056ae1cc47"},
                { new StringContent("dzchunkindex"), "0"},
                { new StringContent("dztotalfilesize"), "134355"},
                { new StringContent("dzchunksize"), "26143000"},
                { new StringContent("dztotalchunkcount"), "1"},
                { new StringContent("dzchunkbyteoffset"), "0"},
                { new FileContent(path), "file", Path.GetFileName(path)}
            };

            var html = UploadData(null, "https://up.uploadfiles.io/upload", data);

            var dataRes = JsonConvert.DeserializeObject<UploadFileModel>(html);

            Process.Start(dataRes.destination);
        }

        string ResloveNormalCaptcha(string captchaKey, string imgBase64)
        {
            string capt = "";

            Recaptcha_2Captcha reCapt = new Recaptcha_2Captcha(captchaKey);

            bool isSuccess = reCapt.SolveNormalCapcha(imgBase64, out capt);

            while (!isSuccess)
            {
                isSuccess = reCapt.SolveNormalCapcha(imgBase64, out capt);
                Thread.Sleep(TimeSpan.FromSeconds(2));
            }

            return capt;
        }

        string Reslove2CaptchaCaptcha(string captchaKey, string ggKey, string url)
        {
            string capt = "";

            Recaptcha_2Captcha reCapt = new Recaptcha_2Captcha(captchaKey);

            bool isSuccess = reCapt.SolveRecaptchaV2(ggKey, url, out capt);

            while (!isSuccess)
            {
                isSuccess = reCapt.SolveRecaptchaV2(ggKey, url, out capt);
                Thread.Sleep(TimeSpan.FromSeconds(2));
            }

            return capt;
        }
        #endregion

        void UploadFile()
        {
            OpenFileDialog dialog = new OpenFileDialog();
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                UploadFile(dialog.FileName);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Crawl
            /*
             HttpClient
             HttpWebClient
             WebClient
             HttpWebRequest
             HttpRequest
             */

            var html = GetData("https://www.howkteam.com/");
            TestData(html);
        }

        void TestData(string html)
        {
            File.WriteAllText("res.html", html);
            Process.Start("res.html");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string cookie = "";
            var html = GetData("https://www.howkteam.com/", null, null, cookie);
            TestData(html);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            HttpRequest http = new HttpRequest();
            http.Cookies = new CookieDictionary();
            string userArgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36";

            var html = GetData("https://www.howkteam.vn", http, userArgent);


            string token = GetLoginDataToken(html);

            string userName = "kteamts@gmail.com";
            string password = "Test123@";
            string data = "__RequestVerificationToken=" + token + "&Email=" + WebUtility.UrlEncode(userName) + "&Password=" + WebUtility.UrlEncode(password) + "&RememberMe=true&RememberMe=false";
            html = PostData(http, "https://www.howkteam.vn/account/login?returnUrl=https%3A%2F%2Fwww.howkteam.vn%2F", data, "application/x-www-form-urlencoded; charset=UTF-8").ToString();

            html = GetData("https://www.howkteam.vn", http, userArgent);

            File.WriteAllText("res.html", html);
            Process.Start("res.html");
        }

        private void button4_Click(object sender, EventArgs e)
        {
            UploadFile();
        }

        private void button5_Click(object sender, EventArgs e)
        {
            HttpRequest http = new HttpRequest();
            http.Cookies = new CookieDictionary();
            string userArgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36";

            var html = GetData("https://vtcgame.vn/nap-vcoin/qua-the-cao.html", http, userArgent);

            string token = GetVTCToken(html);

            string userName = "rongk9";
            string serial = "54356432132434";
            string code = "fdsfdsfdseswfdsfs";

            var binImg = http.Get("https://vtcgame.vn//CaptchaImage.ashx?ss=0.56879455647683&w=60&h=40").ToMemoryStream().ToArray();

            File.WriteAllBytes("Captcha.jpg",binImg);

            string captcha = ResloveNormalCaptcha(textBox1.Text, Convert.ToBase64String(binImg));

            string data = "__RequestVerificationToken=" + token + "&typeCard=VC&seriCard=" + serial + "&codeCard=" + code + "&userNameReceive=" + userName + "&captcha=" + captcha + "&captchaVerify=";
            html = PostData(http, "https://vtcgame.vn/Vcoin/TopupByCard", data, "application/x-www-form-urlencoded; charset=UTF-8").ToString();

            VTCChargeResponseModel resData = JsonConvert.DeserializeObject<VTCChargeResponseModel>(html);

            MessageBox.Show(resData.ErorrMess);
        }

        private void button6_Click(object sender, EventArgs e)
        {
            HttpRequest http = new HttpRequest();
            http.Cookies = new CookieDictionary();
            string userArgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36";

            var html = GetData("http://thaytructuyen.com/Account/Login", http, userArgent);

            string token = GetThayTrucTuyenToken(html);

            string userName = "rongk9";
            string password = "dsadae2dasd";
            string ggKey = "6Lf57BcUAAAAABST6IWjYd97ghC3v2kKsCfPNrdg";
            string captchaURL = "http://thaytructuyen.com/Account/Login";

            string captcha = Reslove2CaptchaCaptcha(textBox1.Text, ggKey, captchaURL);

            string data = "__RequestVerificationToken="+token+"&UserName="+userName+"&Password="+password+"&g-recaptcha-response="+captcha+"&RememberMe=false";
            html = PostData(http, "http://thaytructuyen.com/Account/Login", data, "application/x-www-form-urlencoded; charset=UTF-8").ToString();

            //if (html.Contains("Bạn Chưa X&#225;c Nhận Đ&#250;ng CaptCha."))
            //{

            //}

            TestData(html);
        }
    }

    public class VTCChargeResponseModel
    {
        public int ResponseStatus { get; set; }
        public string ErorrMess { get; set; }
    }

    public class UploadFileModel
    {
        public bool status { get; set; }
        public int id { get; set; }
        public string url { get; set; }
        public string destination { get; set; }
        public string name { get; set; }
        public string filename { get; set; }
        public string slug { get; set; }
        public string size { get; set; }
        public string type { get; set; }
        public string expiry { get; set; }
        public string session_id { get; set; }
        public string timing { get; set; }
    }

    public class Recaptcha_2Captcha
    {
        public string APIKey { get; private set; }
        public Recaptcha_2Captcha(string apiKey)
        {
            APIKey = apiKey;
        }

        /// <summary>
        /// Sends a solve request and waits for a response
        /// </summary>
        /// <param name="googleKey">The "sitekey" value from site your captcha is located on</param>
        /// <param name="pageUrl">The page the captcha is located on</param>
        /// <param name="proxy">The proxy used, format: "username:password@ip:port</param>
        /// <param name="proxyType">The type of proxy used</param>
        /// <param name="result">If solving was successful this contains the answer</param>
        /// <returns>Returns true if solving was successful, otherwise false</returns>
        public bool SolveRecaptchaV2(string googleKey, string pageUrl, out string result)
        {
            string requestUrl = "http://2captcha.com/in.php?key=" + APIKey + "&method=userrecaptcha&googlekey=" + googleKey + "&pageurl=" + pageUrl;
            try
            {
                WebRequest req = WebRequest.Create(requestUrl);

                using (WebResponse resp = req.GetResponse())
                using (StreamReader read = new StreamReader(resp.GetResponseStream()))
                {
                    string response = read.ReadToEnd();

                    if (response.Length < 3)
                    {
                        result = response;
                        return false;
                    }
                    else
                    {
                        if (response.Substring(0, 3) == "OK|")
                        {
                            string captchaID = response.Remove(0, 3);

                            for (int i = 0; i < 24; i++)
                            {
                                WebRequest getAnswer = WebRequest.Create("http://2captcha.com/res.php?key=" + APIKey + "&action=get&id=" + captchaID);

                                using (WebResponse answerResp = getAnswer.GetResponse())
                                using (StreamReader answerStream = new StreamReader(answerResp.GetResponseStream()))
                                {
                                    string answerResponse = answerStream.ReadToEnd();

                                    if (answerResponse.Length < 3)
                                    {
                                        result = answerResponse;
                                        return false;
                                    }
                                    else
                                    {
                                        if (answerResponse.Substring(0, 3) == "OK|")
                                        {
                                            result = answerResponse.Remove(0, 3);
                                            return true;
                                        }
                                        else if (answerResponse != "CAPCHA_NOT_READY")
                                        {
                                            result = answerResponse;
                                            return false;
                                        }
                                    }
                                }

                                Thread.Sleep(5000);
                            }

                            result = "Timeout";
                            return false;
                        }
                        else
                        {
                            result = response;
                            return false;
                        }
                    }
                }
            }
            catch { }

            result = "Unknown error";
            return false;
        }

        /// <summary>
        /// Slove normal capcha wroted by K9 from Kteam
        /// You have to get the capcha image from the website then convert to base64
        /// </summary>
        /// <param name="base64Image"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        public bool SolveNormalCapcha(string base64Image, out string result)
        {
            string response = "";
            using (var client = new WebClient())
            {
                var values = new NameValueCollection();
                values["method"] = "base64";
                values["key"] = APIKey;
                values["body"] = base64Image;
                var res = client.UploadValues("http://2captcha.com/in.php", values);
                response = Encoding.Default.GetString(res);
            }

            Thread.Sleep(TimeSpan.FromSeconds(5));
            if (response.Substring(0, 3) == "OK|")
            {
                string captchaID = response.Remove(0, 3);

                for (int i = 0; i < 24; i++)
                {
                    WebRequest getAnswer = WebRequest.Create("http://2captcha.com/res.php?key=" + APIKey + "&action=get&id=" + captchaID);

                    using (WebResponse answerResp = getAnswer.GetResponse())
                    using (StreamReader answerStream = new StreamReader(answerResp.GetResponseStream()))
                    {
                        string answerResponse = answerStream.ReadToEnd();

                        if (answerResponse.Length < 3)
                        {
                            result = answerResponse;
                            return false;
                        }
                        else
                        {
                            if (answerResponse.Substring(0, 3) == "OK|")
                            {
                                result = answerResponse.Remove(0, 3);
                                return true;
                            }
                            else if (answerResponse != "CAPCHA_NOT_READY")
                            {
                                result = answerResponse;
                                return false;
                            }
                        }
                    }

                    Thread.Sleep(5000);
                }

                result = "Timeout";
                return false;
            }
            else
            {
                result = response;
                return false;
            }
        }
    }
}

Form1.Designer.cs

namespace HttpRequest_Bai1_GetDataFrom_HowKteam
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.button3 = new System.Windows.Forms.Button();
            this.button4 = new System.Windows.Forms.Button();
            this.button5 = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.button6 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(12, 12);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "Get data";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(93, 12);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(122, 23);
            this.button2.TabIndex = 1;
            this.button2.Text = "Get data with cookie";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // button3
            // 
            this.button3.Location = new System.Drawing.Point(221, 12);
            this.button3.Name = "button3";
            this.button3.Size = new System.Drawing.Size(114, 23);
            this.button3.TabIndex = 2;
            this.button3.Text = "Post đăng nhập";
            this.button3.UseVisualStyleBackColor = true;
            this.button3.Click += new System.EventHandler(this.button3_Click);
            // 
            // button4
            // 
            this.button4.Location = new System.Drawing.Point(341, 12);
            this.button4.Name = "button4";
            this.button4.Size = new System.Drawing.Size(75, 23);
            this.button4.TabIndex = 3;
            this.button4.Text = "Upload file";
            this.button4.UseVisualStyleBackColor = true;
            this.button4.Click += new System.EventHandler(this.button4_Click);
            // 
            // button5
            // 
            this.button5.Location = new System.Drawing.Point(12, 41);
            this.button5.Name = "button5";
            this.button5.Size = new System.Drawing.Size(137, 23);
            this.button5.TabIndex = 4;
            this.button5.Text = "Normal captcha VTC";
            this.button5.UseVisualStyleBackColor = true;
            this.button5.Click += new System.EventHandler(this.button5_Click);
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(155, 44);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(111, 20);
            this.textBox1.TabIndex = 5;
            // 
            // button6
            // 
            this.button6.Location = new System.Drawing.Point(272, 42);
            this.button6.Name = "button6";
            this.button6.Size = new System.Drawing.Size(144, 23);
            this.button6.TabIndex = 6;
            this.button6.Text = "Re-Captcha thaytructuyen";
            this.button6.UseVisualStyleBackColor = true;
            this.button6.Click += new System.EventHandler(this.button6_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(432, 191);
            this.Controls.Add(this.button6);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.button5);
            this.Controls.Add(this.button4);
            this.Controls.Add(this.button3);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.Button button3;
        private System.Windows.Forms.Button button4;
        private System.Windows.Forms.Button button5;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Button button6;
    }
}


Project tải xuống

Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới! 

Phần mềm & Thư viện khác


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng


Kết

Trong bài này, chúng ta đã tìm hiểu cách Vượt recapthca với C# dùng Http Request

Ở bài sau, Kteam sẽ giới thiệu đến bạn cách VERIFY EMAIL VỚI C# DÙNG HTTP REQUEST

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Và đừng quên “Luyện tập – Thử Thách – Không ngại khó

Chia sẻ:
Thảo luận Hỏi và đáp Báo lỗi bài viết
Hủy bỏ   hoặc  
Hủy bỏ   hoặc  
Hủy bỏ   hoặc  

Chiến dịch

Kteam - Howkteam Free Education