Możesz nadal używać WebClient do POST (zamiast GET, który jest czasownikiem HTTP , którego obecnie używasz z DownloadString), ale myślę, że łatwiej będzie Ci pracować z (nieco) niższymi klasami WebRequest i WebResponse.
Są to dwie części - pierwsza to wysłanie formularza logowania, druga to odzyskanie nagłówka „Set-cookie” i wysłanie go z powrotem na serwer jako „Cookie” wraz z żądaniem GET. Serwer będzie od tej pory używał tego pliku cookie do identyfikacji użytkownika (zakładając, że korzysta z uwierzytelniania opartego na plikach cookie, co, jestem całkiem pewien, że jest, ponieważ strona zwraca nagłówek Set-cookie, który zawiera „PHPSESSID”).
POST do formularza logowania
Posty w formularzach można łatwo symulować, wystarczy sformatować dane postów w następujący sposób:
field1=value1&field2=value2
Korzystając z WebRequest i kodu, który dostosowałem od Scotta Hanselmana , oto jak POST dane formularza do formularza logowania:
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"];
Oto przykład tego, co powinieneś zobaczyć w nagłówku Set-cookie w formularzu logowania:
PHPSESSID=c4812cffcf2c45e0357a5a93c137642e; path=/; domain=.mmoinn.com,wowmine_referer=directenter; path=/; domain=.mmoinn.com,lang=en; path=/;domain=.mmoinn.com,adt_usertype=other,adt_host=-
POBIERZ stronę za formularzem logowania
Teraz możesz wykonać żądanie GET na stronie, na którą musisz się zalogować.
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();
}
EDYTOWAĆ:
Jeśli chcesz wyświetlić wyniki pierwszego testu POST, możesz odzyskać zwrócony kod HTML za pomocą:
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
Umieść to bezpośrednio poniżej, cookieHeader = resp.Headers["Set-cookie"];
a następnie sprawdź ciąg przechowywany w pageSource.