Puede seguir utilizando WebClient para POST (en lugar de GET, que es el HTTP verb que está utilizando actualmente con DownloadString), pero creo que le resultará más fácil trabajar con las clases (ligeramente) de menor nivel WebRequest y WebResponse.
Hay dos partes para esto: la primera es publicar el formulario de inicio de sesión, la segunda es recuperar el encabezado "Establecer cookies" y enviarlo al servidor como "Cookie" junto con su solicitud GET. El servidor usará esta cookie para identificarlo a partir de ahora (suponiendo que se trata de utilizar la autenticación basada en cookies, que estoy bastante seguro de que es lo que devuelve una página de cabecera Set-cookie que incluye "PHPSESSID").
publicación en el formulario de acceso
mensajes de formulario son fáciles de simular, es sólo un caso de dar formato a los datos de envío de la siguiente manera:
field1=value1&field2=value2
Usando WebRequest y el código Adapté de Scott Hanselman, aquí es cómo se había puesto los datos del formulario a su formulario de entrada:
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"];
He aquí un ejemplo de lo que debería ver en la cabecera Set-Cookie para su formulario de entrada:
PHPSESSID=c4812cffcf2c45e0357a5a93c137642e; path=/; domain=.mmoinn.com,wowmine_referer=directenter; path=/; domain=.mmoinn.com,lang=en; path=/;domain=.mmoinn.com,adt_usertype=other,adt_host=-
Obteniendo la página detrás de la forma de la conexión
Ahora puede realizar su GET solicite una página para la que necesita 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();
}
EDIT:
Si necesita ver los resultados de la primera entrada, puede recuperar el código HTML se volvió con:
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
Coloque esta directamente debajo cookieHeader = resp.Headers["Set-cookie"];
y luego inspeccione la cadena que se encuentra en pageSource.
Por lo tanto, se puede pensar en un montón de maneras de hacer esto ... ¿El El programa C# solicita el 'código' directamente desde el servidor a través de HTTP o ¿se conecta a la aplicación del navegador o qué? Se necesita un poco más de información. –
El programa usa WebClient.DownloadString ("URL") –