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

时间:2016-06-28 19:52:18

标签: c# httpwebrequest

我在尝试对图像的Url做任何事情时收到错误403(无论是获取文件大小还是下载它),但在尝试显示图像时我没有收到任何错误。

我希望我足够清楚,但如果需要,这是一个url构成问题的例子:

Image URL / Site show the image

我正在使用此代码来获取文件大小,该文件大小效果很好但不在此站点上以示例:

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?

1 个答案:

答案 0 :(得分:0)

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

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

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