あなたがアクセスしようとしているWebページがフォーム認証を使用していると思われます。つまり、保護されたリソースにアクセスできるようにするには、有効な認証Cookieを提供する必要があります。また、有効な認証Cookieを取得するには、Cookieを発行するLogOnページにPOSTリクエストを送信して、最初に自分自身を認証する必要があります。 Cookieを取得すると、保護されたリソースに対する後続の要求に基づいてCookieを送信できます。また、WebClient
の箱の外はクッキーをサポートしていないことに気づくべきです。原因ASP.NETのViewStateののcrapinessに明らかに
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");
}
:
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つの要求をオフに解雇し、このクライアントを使用することができます。このような理由から、カスタムクッキーを認識し、Webクライアントを書くことができますログオン要求に沿っていくつかの他のパラメータを送信する必要があるかもしれません。あなたができることは次のとおりです。ウェブブラウザで認証し、送信する必要がある正確なパラメータとヘッダをFireBugで探します。
なぜあなたは単にそのページにリダイレクトしていませんか?サーバープロセスでコードを使用してダウンロードすると、*同じ資格情報を使用していない*ことを意味します。私が正しく理解していれば、ブラウザに(クライアントの資格情報を使って)ページにアクセスするのではなく、別のマシン(サーバー)上の別のプロセスがそれをダウンロードしてクライアントに提示しています。 – shambulator
これらの資格情報はどのようにWebページに提供されますか?フォーム認証を使用していますか? –
@shambulatorそのページにリダイレクトするとどういう意味ですか?私はそのページのhtmlコードを取得しようとしています。 – mko