【问题标题】:HtmlAgilityPack blank imageHtmlAgilityPack 空白图像
【发布时间】:2014-05-09 22:17:25
【问题描述】:

我正在使用 HtmlAgilityPack 从 url 内容中获取标题、描述和图像。除了获取图像外,一切正常。有时图像 url 只返回空白图像。我创建了一个测试方法来确定图像是否存在:

var request = (HttpWebRequest)WebRequest.Create(imageUrl);
request.Credentials = CredentialCache.DefaultCredentials;
request.Method = "HEAD";
var response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
//do something

但有时我只是得到一个空白图像。响应很好,我得到了正确的HttpStatusCodeContentType="image/png"ContentType="image/jpg"。当我通过网络浏览器导航到该图像 url 时,我也一样。我正在考虑以最小长度获取图像,但这是个坏主意。有人知道如何“排除”这些空白图片吗?

【问题讨论】:

    标签: c# .net html-agility-pack


    【解决方案1】:

    首先,检查您是否使用了正确的方法,因为 HEAD 只是获取标题而没有实际内容。您应该使用 GET

    另外,您说有时使用浏览器会得到相同的空白图像,如果是这样,您正在解析和获取图像的站点可能会阻止其站点中图像的热链接。

    Hotlink防止是通过检查图像(包含图像的站点)的Referer来完成的,当您将图像URL放在导航器中时,它是空的。

    您可以在下载图片时向网站发送正确的Referer,然后您可能会得到正确的图片,如下所示:

    var request = (HttpWebRequest)WebRequest.Create(imageUrl);
    request.Credentials = CredentialCache.DefaultCredentials;
    request.Method = "GET";
    request.Referer = urlOfThePageYouJustParsed;
    var response = (HttpWebResponse)request.GetResponse();
    if (response.StatusCode == HttpStatusCode.OK)
    //do something
    

    【讨论】:

    • 我尝试了您的解决方案,但不幸的是它似乎不起作用。
    • 可能主机希望将 cookie 发送到您首先请求的页面。请检查此回复How to add cookies to WebRequest?,看看它现在是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多