Podejrzewam, że strona internetowa, do której próbujesz uzyskać dostęp, korzysta z uwierzytelniania za pomocą formularzy. Oznacza to, że będziesz musiał podać poprawny plik cookie uwierzytelniający, jeśli chcesz mieć dostęp do chronionych zasobów. Aby uzyskać ważny plik cookie uwierzytelniający, musisz najpierw uwierzytelnić się, przesyłając żądanie POST na stronę LogOn, która emituje plik cookie. Po pobraniu pliku cookie będziesz mógł go wysłać wraz z kolejnymi żądaniami dotyczącymi chronionych zasobów. Należy również zauważyć, że po wyjęciu z pudełka WebClient
nie obsługuje plików cookie. Z tego powodu można napisać niestandardowy cookies świadomego klienta na stronie internetowej:
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;
}
}
Teraz można korzystać z tego klienta, aby wystrzelić z 2 wnioski:
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");
}
Oczywiście ze względu na crapiness viewstate z ASP.NET może być konieczne wysłanie kilku innych parametrów podczas żądania logowania. Oto, co możesz zrobić: uwierzytelnij się w przeglądarce i sprawdź w FireBug dokładne parametry i nagłówki, które musisz wysłać.
Dlaczego po prostu nie przekierowujesz do tej strony? Pobieranie go za pomocą kodu w procesie serwera oznacza, że * nie używasz * tych samych poświadczeń. Jeśli rozumiem poprawnie, zamiast przeglądarki (z poświadczeniami klienta) dostęp do strony, inny proces na innym komputerze (serwer) pobiera go i przedstawia go klientowi! – shambulator
W jaki sposób są przekazywane te dane uwierzytelniające do strony internetowej? Czy korzysta z uwierzytelniania za pomocą formularzy? –
@shambulator Co masz na myśli przez przekierowanie na tę stronę? Próbuję uzyskać kod html tej strony. – mko