我正在使用此代码下载文件
private WebClient client;
client = new WebClient();
if (isBusy)
{
client.CancelAsync();
isBusy = false;
this.downloadButton.Text = "Download";
}
else
{
try {
Uri uri = new Uri(urlTextBox.Text);
this.downloadProgressBar.Value = 0;
client.Headers.Add("User-Agent: Other");
client.DownloadFileAsync(uri, "test.csv.zip");
this.downloadButton.Text = "Cancel";
isBusy = true;
}
catch (UriFormatException ex) {
MessageBox.Show(ex.Message);
}
}
但我收到错误错误
Download Not Complete: The remote server returned an error: (403) Forbidden.
我不知道为什么会这样。
但是当我使用uri在免费下载管理器中下载它的工作
我添加了这一行
client.Headers.Add("User-Agent: Other");
但它仍无效。
如果有人能帮助我,我们将非常感激。
提前致谢。
答案 0 :(得分:5)
听起来您正在使用的免费下载管理器可能会欺骗引用标头,而您的实现却不是。如果将referer字段设置为特定值(即服务器上的站点),则服务器可能限制您尝试下载的文件的下载仅可下载。你有没有尝试过:
client.Headers.Add("referer", uri);
使用Fiddler查看下载管理器发送的请求与您的请求之间的区别,然后修改您的请求,直到它可行,这可能是值得的。
修改强>:
我已经测试了您提供的网址,并通过添加以下内容让我在本地工作:
client.Headers.Add("Accept: text/html, application/xhtml+xml, */*");
client.Headers.Add("User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
您需要提供“接受”标头,否则服务器不知道您的客户想要/将接受什么。这是我完整的anonimized示例应用程序(为简单起见使用Sleep()):
string url = "http://..."; // Change this to the full url of the file you want to download
string filename = "downloadedfile.zip"; // Change this to the filename you want to save it as locally.
WebClient client = new WebClient();
try
{
Uri uri = new Uri(url);
client.Headers.Add("Accept: text/html, application/xhtml+xml, */*");
client.Headers.Add("User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
client.DownloadFileAsync(uri, filename);
while (client.IsBusy)
{
System.Threading.Thread.Sleep(1000);
}
}
catch (UriFormatException ex)
{
Console.WriteLine(ex.Message);
}
答案 1 :(得分:1)
如果用户没有查看/下载特定内容的权限,通常会返回403 Forbidden错误。
您已经提到它在免费下载管理器中工作,但您没有提到您是否在免费下载管理器中提供了身份验证信息(是的,您可以这样做)。
无论如何,您的用户代理也可能是一个问题,有些网站不允许使用未知用户代理的客户端,请尝试添加一个流行的Web浏览器,并查看是否可以下载该文件。
IE 10.6 Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0
尝试此行将上述IE 10.6用户代理添加到您的应用程序
client.Headers.Add("User-Agent: Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0");
的完整列表