これはIEで手動でダウンロードできます。
ただし、フォローコードを使用する
WebClient client = new WebClient();
client.DownloadFile(address, filename);
例外を表示:403禁止
どうしましたか?どうやってやるの?
その他
IEで403を取得しました。リソースを取得するには、ログインする必要があると思います。ブラウザに認証情報がキャッシュされている可能性がありますが、アプリはログインするように設計されていません。または、ブラウザでGoogleにログインしていますか?ログアウトして、まだアクセスできるかどうかを確認してください。
ダウンロードする前に、簡単な行を追加するだけです。
string url = ...
string fileName = ...
WebClient wb = new WebClient();
wb.Headers.Add("User-Agent: Other"); //that is the simple line!
wb.DownloadFile(url, fileName);
それでおしまい。
403は、TLSの問題が原因である可能性もあります。確認するには、WebException.Responseオブジェクトのテキストを確認する必要があります。
_ catch (WebException ex)
{
if (ex.Response != null)
{
var response = ex.Response;
var dataStream = response.GetResponseStream();
var reader = new StreamReader(dataStream);
var details = reader.ReadToEnd();
}
}
_
TLSの場合は、これをコードに追加してTLS1.2を強制してみてください。
.net4の場合:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
.net4.5以降の場合:
_ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
_
SharePointサイトのURLから画像をダウンロードしようとすると、この問題が発生しました。私の場合、ヘッダーでuser-agent
をOtherまたは空白に設定するだけでは不十分でした。代わりに、user-agent
を次のように設定する必要がありました。
client.Headers.Add("user-agent", " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
その解決策は この答え から来ました。
DownloadFile
メソッドを呼び出す前に、適切なhttpヘッダーを設定する必要があります。
WebClient webClient = new WebClient();
webClient.Headers.Add("???", "???");
webClient.Headers.Add("???", "???");
webClient.Headers.Add("???", "???");
webClient.DownloadFile(address, filename);
これらの疑問符の代わりに正しい値を入力するのは難しいかもしれません。 Fiddlerまたはその他のプログラムまたはWebブラウザー拡張機能をダウンロードして、WebブラウザーによってGoogleに送信されているhttpヘッダーを明らかにし、基本的に同じ要求をプログラムに複製する必要があります。
これは私に起こったことです:
すべてのブラウザから快適にダウンロードされている(パブリック).xlsファイルを(DownloadFileメソッドを介して)ダウンロードしようとしました。
すべての答えに挑戦して苦労した後(しかし運がなかった)、私はついにスタックを開いて、何か奇妙なことに気づきました(スクリーンショットを参照)。
ファイルはブラウザのhttp経由でダウンロードされていましたが、DownloadFileメソッド経由で403エラーが発生していました。
最後に、URLを http:// something から https:// something に変更したところ、正常に機能しました。
お役に立てれば!
これを解決するための鍵は、コードを介して1回、ブラウザーで2回目のリクエストを実行し、両方のリクエストをFiddlerでログに記録し、ヘッダーが一致することを確認することでした。
結局、次のヘッダーを追加する必要がありました。
これが将来の人々に役立つことを願っています。
いくつかの特定のWebサイトからファイルをダウンロードしようとすると、同様の問題が発生し、一部のファイルでは403エラーが返されますが、他のファイルでは返されません。
User-Agentヘッダー、Acceptヘッダー、https urlやその他のさまざまな設定を試しましたが、それでも成功しません。
両方のURLはブラウザに読み込まれ、それらにアクセスするためにWebサイトでの認証を必要としません(これらはパブリックアクセスです)が、一方はダウンロードし、もう一方は403を返します。
原因とその解決方法に関する支援。
static void Main(string[] args)
{
WebClient webClient = new WebClient();
webClient.Headers.Add("Accept: text/html, application/xhtml+xml, application/pdf, */*");
webClient.Headers.Add("User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
webClient.Headers.Add("Accept-Encoding: gzip, deflate, br");
webClient.Headers.Add("Accept-Language: en-US,en;q=0.9");
webClient.Headers.Add("Cache-Control: no-cache");
webClient.Headers.Add("Upgrade-Insecure-Requests: 1");
try
{
webClient.DownloadFile(new Uri("https://www.vigil.aero/wp-content/uploads/PSB-10-2013-06-14-.pdf"), "test1.pdf");
Console.WriteLine("Complete");
}
catch (Exception ex)
{
Console.WriteLine("{0}", ex.Message);
}
try
{
webClient.DownloadFile(new Uri("https://www.vigil.aero/wp-content/uploads/PSB-9-2013-06-14.pdf"), "test2.pdf");
Console.WriteLine("Complete");
}
catch (Exception ex)
{
Console.WriteLine("{0}", ex.Message);
}
Console.ReadLine();
}