رمز ملء النموذج أعلاه وإرساله هو كما يلي:
// سلسلة URI لإرسال النموذج.
سلسلة uriString = " http://www.xxx.com/Login.aspx "؛
// سلسلة البيانات المراد إرسالها.
string postString = "userName=user1&password=password1";
// تهيئة WebClient
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
// تحويل السلسلة إلى صفيف بايت
byte[] postData = Encoding.ASCII.GetBytes(postString);
// تحميل البيانات وإرجاع مصفوفة البايت للصفحة
byte[] 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" عن طريق النقر بزر الماوس الأيمن على "عرض المصدر" في الصفحة المراد إرسالها. على النحو التالي:
معرف = "__VIEWSTATE" قيمة = "/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0 ="
id="__EVENTVALIDATION" value="/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc"
لا يمكن إرسال قيم "__VIEWSTATE" و"__EVENTVALIDATION" التي تم الحصول عليها من خلال "عرض الملف المصدر" مباشرة إلى النموذج ويجب تحويلها إلى سلاسل مشفرة بعنوان URL.
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventsValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
الكود الكامل هو كما يلي:
// نص زر الإرسال
سلسلة إرسال زر = "تسجيل الدخول"؛
//VeiwState للصفحة (يمكن الحصول عليها عن طريق فتح الصفحة من خلال IE، والنقر بزر الماوس الأيمن على "عرض الملف المصدر")
string viewState = "/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0=";
// التحقق من صحة الصفحة (يمكن الحصول عليها عن طريق فتح الصفحة من خلال IE، والنقر بزر الماوس الأيمن على "عرض الملف المصدر")
string eventsValidation = "/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc";
SubmitButton = System.Web.HttpUtility.UrlEncode(submitButton);
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidationtry
);
{
// سلسلة URI لإرسال النموذج.
سلسلة uriString = " http://www.xxx.com/Login.aspx "؛
// سلسلة البيانات المراد إرسالها. التنسيق كالتالي: user=uesr1&password=123
string postString = "userName=1&password=1" + "&loginButton=" + SubmitButton + "&__VIEWSTATE=" + viewState + "&__EVENTVALIDATION=" + eventsValidation;
// تهيئة WebClient
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
// تحويل السلسلة إلى صفيف بايت
byte[] postData = Encoding.ASCII.GetBytes(postString);
// تحميل البيانات وإرجاع مصفوفة البايت للصفحة
byte[] ResponseData = webClient.UploadData(uriString, "POST", postData);
// تحويل مصفوفة البايت التي تم إرجاعها إلى سلسلة (HTML)؛
// الصفحة التي يتم إرجاعها بواسطة ASP.NET هي بشكل عام Unicode إذا كانت صينية مبسطة، فيجب استخدامها
// Encoding.GetEncoding("GB2312").GetString(responseData)
string srcString = Encoding.UTF8.GetString(responseData);
}
قبض على (WebException نحن)
{
string msg = we.Message;
}
بعض الملاحظات:
1) srcStrinig هو HTML للصفحة التي تم إرجاعها بعد إرسال النموذج، ويمكنك استخدام التعبيرات العادية لتحليلها للحصول على البيانات التي تحتاجها.
2) قيم "__VIEWSTATE" و"__EVENTVALIDATION" ليست ثابتة.
3) يمكنك أيضًا عرض بيانات POST لصفحة الويب من خلال بعض الأدوات، مثل: أداة تحليل بيانات صفحة الويب HttpWatch، ومتطفل الشبكة، وغيرها.
4) إذا كان النموذج المقدم يحتوي على رمز التحقق، فهو لا يدخل في نطاق هذه المادة.
عنوان URL لهذه المقالة: http://www.cnblogs.com/anjou/archive/2006/12/25/602943.html