2009-07-21 11 views
2

Es gibt viele Websites, die ein Skript auf Formular senden und übergeben Parameter mit HTTP POST oder GET aufrufen, mit einem Web-Debugger Ich habe die Parameter gefunden, die übergeben werden. Jetzt möchte ich das gleiche über meine Windows-Anwendung in C# machen. Wie kann ich eine solche Funktionalität erreichen?Ausführen von HTTP-Methoden mit Windows-Anwendung in C#

Ich verwende derzeit HttpWebRequest und HttpWebResponse-Klasse in C#. Aber es ist ein Schmerz, wie ich expliziten Code für jede Seite schreiben muss, die ich versuche zu laden und zu arbeiten. Zum Beispiel versuche ich, Benutzername und Passwort an eine PHP-Seite zu übergeben und die Antwort zu nehmen, die ein Cookie und eine Seite im Gegenzug sendet, anhand derer ich feststellen kann, ob sich der Benutzer angemeldet hat oder nicht.

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 mein 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?

+0

Haben Sie bei der WebClient-Klasse ausgesehen hat? Es schließt eine Menge der Rohrleitungen ein, die in den HttpWebRequest/Response-Klassen involviert sind. –

Antwort

6

sollten Sie verwenden System.Net.WebClient.

Sie es verwenden, können eine Anfrage mit einem beliebigen Verfahren und Header zu machen, die Sie mögen, und bekommen die resultierende Seite mit einem einfachen Stromlesen.

Es ist ein einfaches Beispiel auf der MSDN-Seite, aber einiger Beispielcode für die Verwendung es 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 
} 
+0

Wo finde ich weitere Beispiele für die Implementierung von System.Net.WebClient. –

+0

Weitere Beispiele zur Verwendung meinen Sie? Oder wie ist es programmiert? – womp

+0

Wie ist es programmiert, ich kann auf MSDN finden, nehme ich an, aber wollen mehr Beispiele für die Verwendung. –