Ответ 1
Я подозреваю, что на веб-странице, к которой вы пытаетесь получить доступ, используется проверка подлинности с помощью форм. Это означает, что вам нужно будет предоставить действительный файл cookie для проверки подлинности, если вы хотите иметь доступ к защищенным ресурсам. И чтобы получить действительный файл cookie для проверки подлинности, вам придется сначала пройти аутентификацию, отправив запрос POST на страницу LogOn, которая выдает файл cookie. После получения файла cookie вы сможете отправить его на последующих запросах на защищенные ресурсы. Вы также должны заметить, что из коробки WebClient
не поддерживаются файлы cookie. По этой причине вы можете написать собственный веб-клиент, поддерживающий cookie:
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;
}
}
Теперь вы можете использовать этого клиента, чтобы отключить 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");
}
Очевидно, из-за сложностей ViewState ASP.NET вам может потребоваться отправить еще пару параметров по вашему запросу на вход в систему. Вот что вы могли бы сделать: выполните аутентификацию в веб-браузере и посмотрите с FireBug точные параметры и заголовки, которые необходимо отправить.