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