さまざまなフォーラムやリンクを検索しましたが、まだ役立つものはありません。
実際、リモートサーバーにログインしてそのサーバーからファイルをダウンロードできるようにするC#を使用して、ASP.netでWebアプリケーションを開発することに取り組んでいます。
現在、そのサーバーにログインして、保護されたページのコンテンツを表示できません。
しかし、ファイルをダウンロードしようとすると、Unauthorize access エラーが発生します。
サーバーから画像をダウンロードできますが、それらは保護されていません。
私がこれまでに開発したコードは
protected void Unnamed1_Click(object sender, EventArgs e)
{
try
{
string LOGIN_URL = "https://some.server/";
// first, request the login form to get the value
HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.KeepAlive = true;
webRequest.UserAgent = userAgent;
String received = Encoding.ASCII.GetString(Request.BinaryRead(Request.ContentLength));
webRequest.ContentLength = received.Length;
webRequest.Proxy.Credentials = new NetworkCredential("usrname", "password", "domain");
StreamReader responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream(), Encoding.ASCII);
string responseData = responseReader.ReadToEnd();
responseReader.Close();
string postData = "user=usr&password=pass&switch=Login";
Response.Write(webRequest.Address);
// have a cookie container ready to receive the forms auth cookie
CookieContainer cookies = new CookieContainer();
// now post to the login form
webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.CookieContainer = cookies;
// write the form values into the request message
StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream());
requestWriter.Write(postData);
requestWriter.Close();
// we don't need the contents of the response, just the cookie it issues
webRequest.GetResponse().Close();
// Download files
WebProxy myProxy = new WebProxy("server.https.com", 443);
//WebRequest request = WebRequest.Create("https://some.server/file.zip");
WebRequest request = WebRequest.Create("https://some.server/file.zip");
request.Proxy.Credentials = new NetworkCredential("usrname", "password", "domain");
string filename = "file.zip";
string filepath = "C:\\Documents and Settings\\user\\Desktop\\" + filename.ToString();
WebClient client = new WebClient();
client.Credentials = new NetworkCredential("usrname", "password", "domain");
client.DownloadFile("https://some.server/file.zip", filepath);
}
catch (Exception exp)
{
Response.Write(exp.ToString());
}
}
'/WebSite1' アプリケーションでサーバー エラーが発生しました。
リモート サーバーがエラーを返しました: (401) 権限がありません。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.Net.WebException: リモート サーバーがエラーを返しました: (401) 権限がありません。
ソース エラー:
行 80: WebClient client = new WebClient();
行 81: client.Credentials = new NetworkCredential("username", "password", "domain");
82行目: client.DownloadFile("https://some.server/file.zip", filepath);