C# 我如何获得网站';法维康是谁?

C# 我如何获得网站';法维康是谁?,c#,.net-4.0,favicon,C#,.net 4.0,Favicon,问题很简单:我创建了一个小应用程序,它基本上只是我系统托盘中的收藏夹,这样我就可以从同一个地方打开常用的站点/文件夹/文件。从我的系统中获取已知文件类型的默认图标并不十分复杂,但我不知道如何从网站获取favicon。(例如,地址栏中的灰色->橙色堆栈图标也是如此) 有人知道我该怎么做吗?您可以通过以下几种方式解决这个问题: 在域的根目录中查找favicon.ico www.domain.com/favicon.ico 查找带有rel=“shortcut icon”属性的标记 查找带有rel=“

问题很简单:我创建了一个小应用程序,它基本上只是我系统托盘中的收藏夹,这样我就可以从同一个地方打开常用的站点/文件夹/文件。从我的系统中获取已知文件类型的默认图标并不十分复杂,但我不知道如何从网站获取favicon。(例如,地址栏中的灰色->橙色堆栈图标也是如此)


有人知道我该怎么做吗?

您可以通过以下几种方式解决这个问题:

  • 在域的根目录中查找favicon.ico

    www.domain.com/favicon.ico

  • 查找带有
    rel=“shortcut icon”
    属性的
    标记

  • 查找带有
    rel=“icon”
    属性的
    标记

  • 后两者通常会产生更高质量的图像


    为了涵盖所有基本内容,有些特定于设备的图标文件可能会生成更高质量的图像,因为这些设备上的图标通常比浏览器所需的更大:


    要下载图标而不关心图标是什么,您可以使用这样的实用程序来完成所有繁重的工作:

    var client = new System.Net.WebClient();
    
    client.DownloadFile(
        @"http://www.google.com/s2/favicons?domain=stackoverflow.com",
        "stackoverflow.com.ico");
    

    首先要查找的是站点根目录中的/favicon.ico;类似WebClient.DownloadFile()的东西应该可以。但是,您也可以在元数据中设置图标-因此:

    <link rel="shortcut icon"
       href="http://sstatic.net/stackoverflow/img/favicon.ico">
    

    注意图标是他们的,不是你的

    您可以从网站的HTML获取favicon URL

    以下是favicon的
    元素:

    
    
    这里应该使用正则表达式。如果未找到标记,请在站点根目录中查找
    favicon.ico
    。如果未找到任何内容,则该站点没有favicon。

    HttpWebRequest w=(HttpWebRequest)HttpWebRequest.Create(“http://stackoverflow.com/favicon.ico");
    w、 AllowAutoRedirect=true;
    HttpWebResponse r=(HttpWebResponse)w.GetResponse();
    System.Drawing.Image ico;
    使用(流s=r.GetResponseStream())
    {
    ico=系统.Drawing.Image.FromStream(s);
    }
    ico.Save(“favicon.ico”);
    
    更新至2020年

    以下是2020年以后您可以使用的三项服务

    <img height="16" width="16" src='https://icons.duckduckgo.com/ip3/www.google.com.ico' />
    
    <img height="16" width="16" src='http://www.google.com/s2/favicons?domain=www.google.com' />
    
    <img height="16" width="16" src='https://api.statvoo.com/favicon/?url=google.com' />
    

    这是一个迟来的答案,但为了完整性:很难接近90%的favicon

    不久前我写了一篇文章,试图接近100%

    这就是它的工作原理:

  • 它首先搜索现有的favicon存储库,如Google favicon和GetFavicon以查找favicon

  • 如果它们都没有返回图标,插件将尝试获取图标本身。这涉及到遍历域上的多个页面

  • 插件然后检查物理映像文件,因为在某些服务器上,返回的文件的mime类型不正确

  • 代码仍然不完美,因为在细节中,您会发现许多奇怪的情况:人们错误地编码了路径,例如
    img/favicon.ico
    其中
    img
    不在根目录中,HTML输出中存在重复的头文件,来自头文件和正文的不同服务器响应等等


    获取部分的核心,因此您可以对其进行反向工程,但请注意,应验证响应(检查图像文件类型、mime等)。

    您可以通过3个步骤来完成而无需编程

    1.只需打开网站,右键单击并选择“查看源代码”即可打开该网站的HTML代码。然后在文本编辑器中搜索“favicon”-它将引导您找到类似的内容

    href
    中获取字符串并将其附加到网站的基本URL(假设它是
    )http://WEBSITE/“
    ),所以看起来

    http://WEBSITE/SOMERELATIVEPATH/favicon.ico

    这是通往favicon的绝对路径。如果您没有以这种方式找到它,那么它也可以位于根目录中,在这种情况下,URL是
    http://WEBSITE/favicon.ico

    2.获取您确定的URL并将其插入以下代码的href参数中:
    <html>
      <head>
       <title>Capture Favicon</title>   
      </head>
      <body>
        <a href='http://WEBSITE/SOMERELATIVEPATH/favicon.ico' alt="Favicon"/>Favicon</a> 
      </body>
    </html>
    
    
    捕获法维康
    
    3.将此HTML代码本地保存(例如在桌面上)为GetFavicon.HTML,然后双击以打开它。它将只显示名为Favicon的链接。右键单击此链接并选择“将目标另存为…”将Favicon保存到本地PC上-您就完成了 您可以使用:

    要检索favicon,您可以在以下位置进行热链接

    此页面的示例:

    下载内容,开始吧

    编辑:


    Getfv.co和fvicon.com看起来都死了。如果你想,我找到了一个非免费的选择:。

    通过
    SHGetFileInfo
    (检查签名)可以检索一个小图标或大图标,就像处理一个文件/文件夹/Shell项目一样。

    你可以使用Google S2 Converter


    来源:

    为您提供favicon分析,说明哪些favicon的大小。您可以处理页面信息以查看哪一个是质量最好的favicon,并将其文件名附加到URL以获取它。

    将每个页面所需的请求数量降至最低是一个很好的做法。 因此,如果您需要几个图标,yandex可以在一个查询中创建一个图标精灵。 这里有一个例子 使用jquery

    var favicon = $("link[rel='shortcut icon']").attr("href") ||
                  $("link[rel='icon']").attr("href") || "";
    

    2020年,通过CLI使用duckduckgo.com的服务

    curl -v https://icons.duckduckgo.com/ip2/<website>.ico > favicon.ico
    

    有时,我们无法通过专门的解决方案获得favicon图像,因为一些网站使用.png或其他图像扩展。这是可行的解决方案

  • 使用firefox浏览器打开您的网站
  • 右键单击网站,然后从列表中单击“查看页面信息”选项
  • 它将打开一个对话框并单击“媒体”选项卡
  • 在该选项卡中,您将看到包括favicon在内的所有图像
  • 选择favicon.ico图像或单击im
    var favicon = $("link[rel='shortcut icon']").attr("href") ||
                  $("link[rel='icon']").attr("href") || "";
    
    curl -v https://icons.duckduckgo.com/ip2/<website>.ico > favicon.ico
    
    curl -v https://icons.duckduckgo.com/ip2/www.cdc.gov.ico > favicon.ico