Sospecho que la página web a la que intenta acceder utiliza la Autenticación de formularios. Esto significa que deberá proporcionar una cookie de autenticación válida si desea poder acceder a los recursos protegidos. Y para obtener una cookie de autenticación válida, primero deberá autenticarse enviando una solicitud POST a la página LogOn que emite la cookie. Una vez que recupere la cookie, podrá enviarla en solicitudes posteriores sobre recursos protegidos. También debe tener en cuenta que de fábrica WebClient
no es compatible con las cookies. Por esta razón se podría escribir una cookie personalizada cuenta del cliente web:
public class CookieAwareWebClient : WebClient
{
public CookieAwareWebClient()
{
CookieContainer = new CookieContainer();
}
public CookieContainer CookieContainer { get; private set; }
protected override WebRequest GetWebRequest(Uri address)
{
var request = (HttpWebRequest)base.GetWebRequest(address);
request.CookieContainer = CookieContainer;
return request;
}
}
Ahora usted podría utilizar este cliente para disparar las peticiones 2:
using (var client = new CookieAwareWebClient())
{
var values = new NameValueCollection
{
{ "username", "john" },
{ "password", "secret" },
};
client.UploadValues("http://domain.loc/logon.aspx", values);
// If the previous call succeeded we now have a valid authentication cookie
// so we could download the protected page
string result = client.DownloadString("http://domain.loc/testpage.aspx");
}
Obviamente, debido a la crapiness ViewState de ASP.NET Es posible que deba enviar un par de otros parámetros a lo largo de su solicitud de inicio de sesión. Esto es lo que puede hacer: autenticarse en un navegador web y mirar con FireBug los parámetros exactos y los encabezados que deben enviarse.
¿Por qué no estás redireccionando a esa página? Descargarlo usando el código en el proceso del servidor significa que * no * está usando las mismas credenciales. Si entiendo correctamente, en lugar de que el navegador (con las credenciales del cliente) acceda a la página, un proceso diferente en una máquina diferente (el servidor) es descargarlo y presentarlo al cliente. – shambulator
¿Cómo se proporcionan esas credenciales a la página web? ¿Utiliza Autenticación de formularios? –
@shambulator ¿Qué quiere decir con redirigir a esa página? Estoy tratando de obtener el código html de esa página. – mko