Sie können WebClient weiterhin für POST verwenden (anstelle von GET, dem HTTP-Verb, das Sie derzeit mit DownloadString verwenden), aber ich denke, Sie werden es einfacher finden, mit den (geringfügig) untergeordneten Klassen WebRequest und WebResponse zu arbeiten.
Dies besteht aus zwei Teilen: Der erste besteht darin, das Anmeldeformular zu veröffentlichen, der zweite darin, den "Set-Cookie" -Header wiederherzustellen und diesen zusammen mit Ihrer GET-Anfrage als "Cookie" an den Server zurückzusenden. Der Server wird dieses Cookie von nun an verwenden, um Sie zu identifizieren (vorausgesetzt, es verwendet eine Cookie-basierte Authentifizierung, von der ich ziemlich sicher bin, dass diese Seite einen Set-Cookie-Header zurückgibt, der "PHPSESSID" enthält).
POSTing zum Anmeldeformular
Formularbeiträge sind einfach zu simulieren. Sie müssen lediglich Ihre Beitragsdaten wie folgt formatieren:
field1=value1&field2=value2
Mit WebRequest und Code, den ich von Scott Hanselman angepasst habe , können Sie die folgenden Formulardaten in Ihr Anmeldeformular POSTEN :
string formUrl = "http://www.mmoinn.com/index.do?PageModule=UsersAction&Action=UsersLogin";
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 Sie im Set-Cookie-Header für Ihr Anmeldeformular sehen sollten:
PHPSESSID=c4812cffcf2c45e0357a5a93c137642e; path=/; domain=.mmoinn.com,wowmine_referer=directenter; path=/; domain=.mmoinn.com,lang=en; path=/;domain=.mmoinn.com,adt_usertype=other,adt_host=-
Die Seite hinter dem Anmeldeformular abrufen
Jetzt können Sie Ihre GET-Anforderung für eine Seite ausführen, für die Sie angemeldet 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();
}
BEARBEITEN:
Wenn Sie die Ergebnisse des ersten POST anzeigen müssen, können Sie den zurückgegebenen HTML-Code wiederherstellen mit:
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
Platzieren Sie diese direkt darunter cookieHeader = resp.Headers["Set-cookie"];
und überprüfen Sie die in pageSource enthaltene Zeichenfolge.