รหัสที่ต้องกรอกและส่งแบบฟอร์มข้างต้นมีดังนี้:
// สตริง URI เพื่อส่งแบบฟอร์ม
สตริง uriString = " http://www.xxx.com/Login.aspx ";
// สตริงข้อมูลที่จะส่ง
string postString = "userName=user1&password=password1";
// เริ่มต้น WebClient
WebClient webClient = WebClient ใหม่ ();
webClient.Headers.Add("ประเภทเนื้อหา", "application/x-www-form-urlencoded");
//แปลงสตริงเป็นอาร์เรย์ไบต์
ไบต์ [] postData = การเข้ารหัส ASCII.GetBytes (postString);
//อัปโหลดข้อมูลและส่งคืนอาร์เรย์ไบต์ของเพจ
ไบต์ [] responseData = webClient.UploadData (uriString, "POST", postData);
//แปลงอาร์เรย์ไบต์ที่ส่งคืนเป็นสตริง (HTML)
string srcString = Encoding.UTF8.GetString(responseData);
srcStrinig คือ HTML ของหน้าที่ส่งคืนหลังจากส่งแบบฟอร์ม เป็นยังไงบ้างคะ ง่ายมาก
อย่างไรก็ตาม โค้ดข้างต้นสามารถส่งแบบฟอร์มที่สร้างโดย ASP หรือ JSP ได้ แต่ไม่สามารถส่งแบบฟอร์ม ASP.NET ได้ เพราะเมื่อส่งแบบฟอร์ม ASP.NET จะต้องกำหนดค่าให้กับ "__VIEWSTATE" และ "__EVENTVALIDATION" สามารถดูค่าของ "__VIEWSTATE" และ "__EVENTVALIDATION" ได้โดยการคลิกขวาที่ "View Source" บนหน้าที่จะส่ง ดังต่อไปนี้:
id="__VIEWSTATE" value="/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0="
id="__EVENTVALIDATION" value="/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc"
ค่าของ "__VIEWSTATE" และ "__EVENTVALIDATION" ที่ได้รับผ่าน "View Source File" ไม่สามารถส่งไปยังแบบฟอร์มได้โดยตรง และจำเป็นต้องแปลงเป็นสตริงที่เข้ารหัส URL
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidation = System.Web.HttpUtility.UrlEncode (eventValidation);
รหัสที่สมบูรณ์มีดังนี้:
// ข้อความของปุ่มส่ง
string sendButton = "เข้าสู่ระบบ";
//VeiwState ของเพจ (สามารถรับได้โดยการเปิดเพจผ่าน IE คลิกขวาที่ "ดูไฟล์ต้นฉบับ")
สตริง viewState = "/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0=";
//EventValidation ของเพจ (สามารถรับได้โดยการเปิดเพจผ่าน IE คลิกขวาที่ "View Source File")
string eventValidation = "/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc";
sendButton = System.Web.HttpUtility.UrlEncode(submitButton);
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidation = System.Web.HttpUtility.UrlEncode (eventValidation);
ลอง
-
// สตริง URI เพื่อส่งแบบฟอร์ม
สตริง uriString = " http://www.xxx.com/Login.aspx ";
// สตริงข้อมูลที่จะส่ง รูปแบบเป็นดังนี้: user=uesr1&password=123
string postString = "userName=1&password=1" + "&loginButton=" + sendButton + "&__VIEWSTATE=" + viewState + "&__EVENTVALIDATION=" + eventValidation;
// เริ่มต้น WebClient
WebClient webClient = WebClient ใหม่ ();
webClient.Headers.Add("ประเภทเนื้อหา", "application/x-www-form-urlencoded");
//แปลงสตริงเป็นอาร์เรย์ไบต์
ไบต์ [] postData = การเข้ารหัส ASCII.GetBytes (postString);
//อัปโหลดข้อมูลและส่งคืนอาร์เรย์ไบต์ของเพจ
ไบต์ [] responseData = webClient.UploadData (uriString, "POST", postData);
// แปลงอาร์เรย์ไบต์ที่ส่งคืนเป็นสตริง (HTML);
//หน้าที่ส่งคืนโดย ASP.NET โดยทั่วไปจะเป็น Unicode หากเป็นภาษาจีนตัวย่อก็ควรใช้
// Encoding.GetEncoding("GB2312").GetString(responseData)
string srcString = Encoding.UTF8.GetString(responseData);
-
จับ (WebException เรา)
-
ข้อความสตริง = we.Message;
-
หมายเหตุบางประการ:
1) srcStrinig คือ HTML ของหน้าที่ส่งคืนหลังจากส่งแบบฟอร์ม คุณสามารถใช้นิพจน์ทั่วไปเพื่อวิเคราะห์เพื่อให้ได้ข้อมูลที่คุณต้องการ
2) ค่าของ "__VIEWSTATE" และ "__EVENTVALIDATION" ไม่คงที่
3) คุณยังสามารถดูข้อมูล POST ของหน้าเว็บผ่านเครื่องมือบางอย่าง เช่น: เครื่องมือวิเคราะห์ข้อมูลหน้าเว็บ HttpWatch, ดมกลิ่นเครือข่าย ฯลฯ
4) หากแบบฟอร์มที่ส่งมามีรหัสยืนยัน แสดงว่าไม่อยู่ในขอบเขตของบทความนี้
URL ของบทความนี้: http://www.cnblogs.com/anjou/archive/2006/12/25/602943.html