HttpWebRequest模拟浏览器发送请求

来源:互联网 发布:仲恺教务网络管理系统 编辑:程序博客网 时间:2024/05/14 21:38

这个是工具抓取到的请求数据,是向目标servlet发送post数据:

           //POST /aaa/bbbForm HTTP/1.1
            //Host: www.testtest.cn
            //Connection: keep-alive
            //Content-Length: 265
            //Origin: http://www.testtest.cn
            //X-Requested-With: XMLHttpRequest
            //User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19
            //Content-Type: application/x-www-form-urlencoded; charset=UTF-8
            //Accept: application/json, text/javascript, */*; q=0.01
            //Referer: http://www.testtest.cn
            //Accept-Encoding: gzip,deflate,sdch
            //Accept-Language: zh-CN,zh;q=0.8
            //Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
            //Cookie: JSESSIONID=684DBAC1BD970D4C614E3D5410A5086D; Bt2PxxhZg9=MDAwM2IyNGM1ZWMwMDAwMDAwMDYwSG4XNEsxMzM1MjY4ODE1

            //results=1223088&results=1223107&results=1223065&results=1223123
            //&username=%E9%83%91%E7%BE%A4&idCard=11111117&email=&imageValue=1

下面是组装并发送请求:

            System.Net.ServicePointManager.Expect100Continue = false;
            string url = "http://www.testtest.cn//aaa/bbbForm";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            //填充httpWebRequest的基本信息
            request.Method = "POST";           
            string username = "张三"; //Encoding.GetEncoding("UTF-8"). string.Empty;
            string idCard = "12222";

            string postData = string.Format(@"results=1223050&results=1223088&results=1223107&results=1223065&results=1223123&username={0}&idCard={1}&email=&imageValue=4", username, idCard);
            byte[] bytesToPost = Encoding.GetEncoding("UTF-8").GetBytes(postData);
            request.ContentLength = bytesToPost.Length;

            request.Headers.Set("Cookie", "JSESSIONID=684DBAC1BD970D4C614E3D5410A5086D; Bt2PxxhZg9=MDAwM2IyNGM1ZWMwMDAwMDAwMDYwSG4XNEsxMzM1MjY4ODE1");
            //CookieContainer cookieContainer = new CookieContainer();
            //request.CookieContainer = cookieContainer;
            //cookieContainer.SetCookies(new Uri(url, UriKind.Absolute), "JSESSIONID=20DFFCA8D3B00846E1104700E1F4D894");
            //cookieContainer.Add(new Uri(url, UriKind.Absolute), new Cookie("Bt2PxxhZg9", "MDAwM2IyNGM1ZWMwMDAwMDAwMDYwEE13blYxMzM1MjY3ODY4"));

            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19";
            request.ContentType="application/x-www-form-urlencoded; charset=UTF-8";
            request.Accept="application/json, text/javascript, */*; q=0.01";
            request.Host = “www.testtest.cn";           
            request.Referer="http://www.testtest.cn";
            request.Headers.Set("X-Requested-With", "http://www.testtest.cn");
            request.Headers.Set("Origin", "XMLHttpRequest");
            request.Headers.Set("Accept-Encoding", "gzip,deflate,sdch");
            request.Headers.Set("Accept-Language", "zh-CN,zh;q=0.8");
            request.Headers.Set("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3");          

            Stream requestStream = request.GetRequestStream();
            requestStream.Write(bytesToPost, 0, bytesToPost.Length);
            requestStream.Close();
            Stream responseStream;
           
            try
            {
                responseStream = request.GetResponse().GetResponseStream();//接受请求的结果
                StreamReader reader = new StreamReader(responseStream);
                string result = reader.ReadToEnd();
                txtResult.Text = result;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + ": " + ex.Message);
            }

这种方式可以顺利的模拟请求,并接收到请求结果。

不过最后还是没用这种方式去实现需求,因为对方的验证码是

(1) 每次发送请求,重新获取验证码并有干扰线,简单的程序无法识别

(2) 然后提交请求后会将验证码清除掉(防止下次再被利用)

这也是防止被暴力提交的方法。

 

后来的实现方式是在webbrowser里手动提交,不过对页面当中的控件值进行自动填充,从而提高了提交效率。

方式如下:

    List<string> listStr = new List<string>();
        private void btnRefrechPage_Click(object sender, EventArgs e)
        {
            try
            {
                if (listStr.Count > 0)
                {
                    txtResult.Text = (100 - listStr.Count).ToString();
                    string[] value = System.Text.RegularExpressions.Regex.Split(listStr[0], @"\t");
                    //查找HTML元素并给赋值
                    webBrowser.Document.GetElementById("username").InnerText = value[0];
                    webBrowser.Document.GetElementById("idCard").InnerText = value[1];
                    HtmlElementCollection checkBox = webBrowser.Document.GetElementsByTagName("input");
                    foreach (HtmlElement element in checkBox)
                    {
                        if ((",1223146,1223192,1223191,1223121,1223210,1223110,1223098,1223050,1223088,1223107,1223065,1223123").IndexOf(element.GetAttribute("value").ToString()) > -1)
                        {
                            element.SetAttribute("checked", "true");
                        }
                    }
                    webBrowser.Document.GetElementById("username").Focus();
                    listStr.RemoveAt(0);
                }
            }
            catch
            { }
        }

 读取填充信息:

             private void btnReadUser_Click(object sender, EventArgs e)
        {
            listStr = new List<string>();
            FileStream file = new FileStream("c:/id.txt", FileMode.Open);
            StreamReader reader = new StreamReader(file, Encoding.GetEncoding("GB2312"));
            string str = string.Empty;
            while ((str=reader.ReadLine()) != null)
            {
                listStr.Add(str);
            }
            reader.Close();
            reader.Dispose();
            file.Close();
            file.Dispose();
        }

 

private void btnLink_Click(object sender, EventArgs e)
        {
            webBrowser.Url = new Uri(txtUrl.Text.Trim(), UriKind.Absolute);
            webBrowser.Refresh();
            webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted);
        }

        void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            try
            {
                currentUrl.Text = webBrowser.Url.AbsoluteUri.ToString();
            }
            catch { }
        }


 

原创粉丝点击