سؤال

هناك العديد من المواقع التي تسمون برنامج نصي عند النموذج إرسال وتمرير معلمات باستخدام مشاركة HTTP أو الحصول عليها، باستخدام مصحح أخطاء ويب وجدتهما المعلمات التي تم تمريرها. الآن أتمنى أن أفعل نفس الشيء من خلال تطبيق Windows الخاص بي في C #. كيف يمكنني تحقيق مثل هذه الوظيفة؟

أنا حاليا باستخدام HttpWebRequest وفئة HttpWebresponse في C #. لكنه ألم يجب أن أكتب رمز صريح لكل صفحة أحاول التحميل والعمل. على سبيل المثال، أحاول تمرير اسم المستخدم وكلمة المرور إلى صفحة PHP وأخذ الاستجابة، والتي سترسل ملف تعريف الارتباط وصفحة موجودة، استنادا إلى تحديد ما إذا قام المستخدم بتسجيل الدخول أم لا.

HttpWebRequest loginreq = createreq("http://www.indyarocks.com/mobile/index.php");
                String logintext = "username=" + TxtUsrname.Text + "&pass=" + TxtPasswd.Password + "&button.x=0&button.y=0";
                loginreq.ContentLength = logintext.Length;
                StreamWriter writerequest = new StreamWriter(loginreq.GetRequestStream());
                writerequest.Write(logintext);
                writerequest.Close();
                HttpWebResponse getloginpageresponse = (HttpWebResponse)loginreq.GetResponse();
                cookie = getloginpageresponse.Cookies[0];
                BinaryFormatter bf1 = new BinaryFormatter();
                Stream f1 = new FileStream("E:\\cookie.dat", FileMode.OpenOrCreate);
                bf1.Serialize(f1, cookie);
                f1.Close();

                string nexturl = getloginpageresponse.Headers[HttpResponseHeader.Location];
                StreamReader readresponse = new StreamReader(getloginpageresponse.GetResponseStream());
                if (nexturl == "p_mprofile.php")
                {
                    MessageBox.Show("Login Successful");
                    GrpMsg.IsEnabled = true;
                }
                else if (nexturl == "index.php?msg=1")
                {
                    MessageBox.Show("Invalid Credentials Login again");
                }

هذا هو فئة createreq بلدي

 private HttpWebRequest createreq(string url)
        {
            HttpWebRequest temp = (HttpWebRequest)WebRequest.Create(url);
            temp.Method = "POST";
            temp.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 3.5.21022; FDM)";
            temp.KeepAlive = true;
            temp.ContentType = "application/x-www-form-urlencoded";
            temp.CookieContainer = new CookieContainer();
            temp.AllowAutoRedirect = false;
            return temp;
        }

هل أنا على الطريق الصحيح؟ هل هناك أي طريقة أفضل للقيام بذلك؟

هل كانت مفيدة؟

المحلول

يجب عليك استخدامها system.net.webclient.

يمكنك استخدامه لتقديم طلب مع أي طريقة ورؤوس تريدها، والحصول على الصفحة الناتجة مع قراءة دفق بسيطة.

هناك مثال بسيط على صفحة MSDN، لكن بعض رمز العينة لاستخدامه قد يبدو:

WebClient webclient= new WebClient();

using (StreamReader reader = new StreamReader(webclient.OpenRead("http://www.google.com")))
{
        string result = reader.ReadToEnd();
         // Parse web page here
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top