这个是工具抓取到的请求数据,是向目标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 { }
}