Sie können weiterhin WebClient für POST verwenden (anstelle von GET, das ist die HTTP verb, die Sie derzeit mit DownloadString verwenden), aber ich denke, Sie werden es leichter finden, mit der (geringfügig) niedrigeren Klassen WebRequest zu arbeiten und WebResponse.
Es gibt zwei Teile davon - der erste ist das Login-Formular zu posten, der zweite ist die Wiederherstellung des Headers "Set-Cookie" und das Zurücksenden an den Server als "Cookie" zusammen mit Ihrer GET-Anfrage. Der Server wird diesen Cookie verwenden, um Sie von nun an zu identifizieren (vorausgesetzt, er verwendet eine Cookie-basierte Authentifizierung, von der ich ziemlich überzeugt bin, dass diese Seite einen Set-Cookie-Header zurückgibt, der "PHPSESSID" enthält).
Buchung auf das Login-Formular
FORMULARPLZ einfach zu simulieren sind, es ist nur ein Fall Ihre Post-Daten der Formatierung wie folgt:
field1=value1&field2=value2
Mit WebRequest und Code I angepasst Von Scott Hanselman, hier ist, wie Sie POST Daten zu Ihrem Login-Formular senden würden:
string formUrl = "http://www.mmoinn.com/index.do?PageModule=UsersAction&Action=UsersLogin"; // NOTE: This is the URL the form POSTs to, not the URL of the form (you can find this in the "action" attribute of the HTML's form tag
string formParams = string.Format("email_address={0}&password={1}", "your email", "your password");
string cookieHeader;
WebRequest req = WebRequest.Create(formUrl);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
WebResponse resp = req.GetResponse();
cookieHeader = resp.Headers["Set-cookie"];
Hier ist ein Beispiel dafür, was man in den Set-Cookie-Header für Ihr Login-Formular sehen soll:
PHPSESSID=c4812cffcf2c45e0357a5a93c137642e; path=/; domain=.mmoinn.com,wowmine_referer=directenter; path=/; domain=.mmoinn.com,lang=en; path=/;domain=.mmoinn.com,adt_usertype=other,adt_host=-
gibt es die Seite hinter dem Anmeldeformular
Jetzt können Sie führen Sie Ihre GET Anfrage an eine Seite, für die Sie eingeloggt sein müssen.
string pageSource;
string getUrl = "the url of the page behind the login";
WebRequest getRequest = WebRequest.Create(getUrl);
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
EDIT:
Wenn Sie die Ergebnisse der ersten POST anzeigen möchten, können Sie den HTML erholen es mit zurück:
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
Dieses direkt unter cookieHeader = resp.Headers["Set-cookie"];
und dann Überprüfen Sie die in pageSource enthaltene Zeichenfolge.
Also, ich kann von ein paar Möglichkeiten denken, dies zu tun ... Ist die C# -Programm fordern Sie den "Code" direkt vom Server über HTTP oder Sie Piggy Back auf die Browser-Anwendung oder was? Ein bisschen mehr Info wird benötigt. –
Das Programm verwendet WebClient.DownloadString ("URL") –