Sospetto che la pagina Web a cui si sta tentando di accedere utilizzi Autenticazione moduli. Ciò significa che dovrai fornire un cookie di autenticazione valido se desideri essere in grado di accedere a risorse protette. E per ottenere un cookie di autenticazione valido dovrai prima autenticarti inviando una richiesta POST alla pagina LogOn che emette il cookie. Una volta recuperato il cookie, sarai in grado di inviarlo insieme alle richieste successive su risorse protette. Si dovrebbe anche notare che la scatola WebClient
non supporta i cookie. Per questo motivo si potrebbe scrivere un cookie personalizzato consapevoli client 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;
}
}
Ora si potrebbe usare questo client di sparare le 2 richieste:
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");
}
Ovviamente a causa della crapiness ViewState di ASP.NET potrebbe essere necessario inviare un paio di altri parametri lungo la richiesta di accesso. Ecco cosa potresti fare: autenticarti in un browser web e guardare con FireBug i parametri esatti e le intestazioni da inviare.
fonte
2012-06-20 11:48:11
Perché non stai semplicemente reindirizzando a quella pagina? Scaricarlo utilizzando il codice nel processo del server significa che * non * sta utilizzando le stesse credenziali. Se capisco correttamente, piuttosto che il browser (con le credenziali del cliente) che accede alla pagina, un processo diverso su una macchina diversa (il server) lo sta scaricando e presentandolo al client! – shambulator
Come vengono fornite tali credenziali alla pagina Web? Utilizza l'autenticazione basata su form? –
@shambulator Che cosa intendi per reindirizzare a quella pagina? Sto cercando di ottenere il codice html di quella pagina. – mko