Frage

Es gibt viele Websites, die ein Skript auf Formular aufrufen einreichen und übergeben Sie Parameter HTTP POST oder GET, mit einem Web-Debugger i die Parameter übergeben wird gefunden. Nun wünsche ich die gleiche Sache durch meine Windows-Anwendung in C # zu tun. Wie kann ich eine solche Funktionalität erreichen?

Ich bin derzeit mit HttpWebRequest und HttpWebResponse Klasse in C #. Aber es ist ein Schmerz, wie ich für jede Seite i expliziten Code schreiben müssen versuchen, zu laden und zu arbeiten. Für das Beispiel versuche ich Benutzername und Passwort auf eine PHP-Seite zu übergeben und die Reaktion nehmen, die ein Cookie und eine Seite im Gegenzug senden, basierend auf der i zu identifizieren, wenn der Benutzer angemeldet ist oder nicht hat.

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");
                }

Das ist meine createreq Klasse

 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;
        }

Bin ich auf dem richtigen Weg? Gibt es einen besseren Weg, es zu tun?

War es hilfreich?

Lösung

Sie sollten verwenden System.Net.WebClient.

Sie können es verwenden, um eine Anforderung mit jeder Methode und Header zu machen, die Sie mögen, und die resultierende Seite mit einem einfachen Stromlesen erhalten.

Es ist ein einfaches Beispiel auf der MSDN-Seite, aber einige Codebeispiel es für die Verwendung könnte wie folgt aussehen:

WebClient webclient= new WebClient();

using (StreamReader reader = new StreamReader(webclient.OpenRead("http://www.google.com")))
{
        string result = reader.ReadToEnd();
         // Parse web page here
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top