尝试下载图像时出现403错误,但不显示图像
本文关键字:图像 错误 显示 显示图 下载 | 更新日期: 2023-09-27 17:52:42
当我尝试对图像的Url做任何事情时(无论是获取文件大小还是下载它),我得到一个错误403,但我没有得到任何错误,同时试图显示图像。
我希望我足够清楚,但如果需要的话,这是一个url提出问题的例子:
图片URL/网站显示图片
我使用这个代码来获取文件大小,它工作得很好,但不是在这个网站上,例如:
public void getFileSize(string uri)
{
try
{
waitGetSize = 0;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
req.Timeout = 5000;
req.Method = "HEAD";
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
imgSize = resp.ContentLength;
imgSizeKb = imgSize / 1024;
waitGetSize = 1;
}
catch (Exception ex)
{
MetroMessageBox.Show(this, ex.Message, "Exception :", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
正如cFrozenDeath所指出的,我使用了HEAD请求,所以我尝试使用GET请求来达到完全相同的效果。只需不声明我想要的请求类型,结果相同。
那么是否有一种方法可以获得文件大小或至少下载文件,知道它在浏览器中打开时显示OK ?
当你想从网站上抓取内容时,你必须模仿一个网络浏览器。
有时候这意味着你需要提供和/或保留你最初登陆一个网站时得到的Cookies
,有时候你必须告诉网络服务器哪个页面链接到资源。
在这种情况下,您需要在标题中提供Referer
:
public void getFileSize(string uri)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
// which page do we want that server to believe we call this from
req.Referer = "http://www.webtoons.com/";
req.Timeout = 5000;
req.Method = "GET"; // or do a HEAD
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
// rest omitted
}
该图像的长度为273073
字节。
请注意,抓取内容可能违反特定网站的服务条款。确保你最后不会做违法的事情。