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