Ich vermute, dass die Webseite, auf die Sie zugreifen möchten, die Formularauthentifizierung verwendet. Dies bedeutet, dass Sie einen gültigen Authentifizierungscookie angeben müssen, wenn Sie auf geschützte Ressourcen zugreifen möchten. Um ein gültiges Authentifizierungs-Cookie zu erhalten, müssen Sie sich zunächst authentifizieren, indem Sie eine POST-Anfrage an die LogOn-Seite senden, die den Cookie ausgibt. Sobald Sie das Cookie abgerufen haben, können Sie es bei nachfolgenden Anfragen an geschützte Ressourcen senden. Sie sollten außerdem bemerken, dass WebClient
keine Cookies unterstützt. Aus diesem Grund könnten Sie eine benutzerdefinierte Cookie bewusst Webclient schreiben:
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;
}
}
Nun könnte man diesen Client verwenden, um die 2-Anfragen abzufeuern:
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");
}
Offensichtlich aufgrund der Viewstate crapiness von ASP.NET Sie müssen möglicherweise einige andere Parameter entlang Ihrer Anmeldeanforderung senden. Das können Sie tun: Authentifizieren Sie sich in einem Webbrowser und schauen Sie mit FireBug die genauen Parameter und Header an, die gesendet werden müssen.
Warum leiten Sie nicht einfach auf diese Seite um? Wenn Sie es mit Code im Serverprozess herunterladen, bedeutet dies, dass Sie * nicht dieselben Anmeldeinformationen verwenden. Wenn ich richtig verstehe, dass der Browser (mit den Anmeldeinformationen des Clients) auf die Seite zugreift, lädt ein anderer Prozess auf einem anderen Computer (dem Server) es herunter und präsentiert es dem Client! – shambulator
Wie werden diese Zugangsdaten für die Webseite bereitgestellt? Wird die Formularauthentifizierung verwendet? –
@shambulator Was meinst du mit Weiterleitung zu dieser Seite? Ich versuche, HTML-Code dieser Seite zu bekommen. – mko