尝试下载图像时出现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 ?

尝试下载图像时出现403错误,但不显示图像

当你想从网站上抓取内容时,你必须模仿一个网络浏览器。

有时候这意味着你需要提供和/或保留你最初登陆一个网站时得到的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字节。

请注意,抓取内容可能违反特定网站的服务条款。确保你最后不会做违法的事情。