Puede continuar usando WebClient para POST (en lugar de GET, que es el verbo HTTP que está usando actualmente con DownloadString), pero creo que le resultará más fácil trabajar con las clases WebRequest y WebResponse (ligeramente) de nivel inferior.
Hay dos partes para esto: la primera es publicar el formulario de inicio de sesión, la segunda es recuperar el encabezado "Set-cookie" y enviarlo de vuelta al servidor como "Cookie" junto con su solicitud GET. El servidor usará esta cookie para identificarlo de ahora en adelante (asumiendo que está usando autenticación basada en cookies, que estoy bastante seguro de que es porque esa página devuelve un encabezado Set-cookie que incluye "PHPSESSID").
PUBLICAR en el formulario de inicio de sesión
Las publicaciones de formulario son fáciles de simular, solo se trata de formatear los datos de la publicación de la siguiente manera:
field1=value1&field2=value2
Usando WebRequest y el código que adapté de Scott Hanselman , así es como enviaría los datos del formulario a su formulario de inicio de sesión:
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"];
Aquí hay un ejemplo de lo que debería ver en el encabezado Set-cookie para su formulario de inicio de sesión:
PHPSESSID=c4812cffcf2c45e0357a5a93c137642e; path=/; domain=.mmoinn.com,wowmine_referer=directenter; path=/; domain=.mmoinn.com,lang=en; path=/;domain=.mmoinn.com,adt_usertype=other,adt_host=-
OBTENER la página detrás del formulario de inicio de sesión
Ahora puede realizar su solicitud GET en una página en la que debe iniciar sesión.
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();
}
EDITAR:
Si necesita ver los resultados del primer POST, puede recuperar el HTML que devolvió con:
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
Coloque esto directamente debajo cookieHeader = resp.Headers["Set-cookie"];
y luego inspeccione la cadena contenida en pageSource.