如何在c#中检查url是文件类型还是网页类型?
Posted
技术标签:
【中文标题】如何在c#中检查url是文件类型还是网页类型?【英文标题】:how to check url is file type or webpage type in c#? 【发布时间】:2016-08-28 20:48:51 【问题描述】:我用 C# 编写了用于抓取网站的应用程序。 现在我有一个问题 我可以确定此 URL 指向文件或网页! 如何在不发送请求的 URL 的情况下解决此问题?
【问题讨论】:
网址提供内容。 “文件”与“网页”是什么意思?您实际上是在要求Content-Type
响应标头吗?
您使用的是哪个客户端?您应该能够向 url 发出 HEAD 请求并检查响应标头中的内容类型。
"How can I solve this problem without having to send the requested URL?"
- 你不能。 URL 本身只是一个地址。它不提供任何关于该地址 at 的信息,它只是告诉您在哪里寻找某些东西。该地址的网络服务器可以返回anything。您必须发出 一些 请求(至少是 HEAD
请求)才能获取有关该地址内容的更多信息。
【参考方案1】:
您不能不发送请求...因为统一资源定位器无法与文件系统路径相提并论。例如,虽然以下 url 以 .jpg
结尾,但它显然不是图片:
google.com/search?q=asd.jpg
如果您决定改变主意,请参考以下方法:
public bool IsFileContent(string url)
var request = HttpWebRequest.Create(url);
request.Method = "HEAD";
switch (request.GetResponse().ContentType)
case "image/jpeg": return true;
case "text/plain": return true;
case "text/html": return false;
default: // TODO: add more case as needed
throw new ArgumentOutOfRangeException();
【讨论】:
【参考方案2】:您要求做的事情实际上是不可能的。 URL 不会“指向文件或网页”。它们被路由到请求处理程序。请求处理程序可以返回 HTML 响应或文件下载或其他类型的响应。诸如“.html”或“.pdf”之类的一些扩展名暗示了响应的类型应该是什么。但是一个 URL 可能有一个不指示响应类型的扩展名,或者(就像在这个页面上一样)根本没有扩展名。
您无法仅从 URL 确定 HTTP 请求的响应类型。
【讨论】:
【参考方案3】:在不发送任何请求的情况下,我唯一能想到的就是检查 url 末尾的文件扩展名。这不会给您 100% 的成功率,因为您可以使用不以扩展名结尾的 url 发送文件。话虽这么说,通常的做法是让文件 url 以带有扩展名的文件名结尾
【讨论】:
文件扩展名在 URL 上完全没有意义。 HTTP 不是文件系统。 @David 不,但是大多数上传到网络服务器或网络服务器上可供下载的文件都以文件扩展名(.pdf、.jpg 等)结尾。 那么是什么类型:/DownloadFile.aspx?fileID=123
或:/Files/123
或:/FindFiles.aspx?searchText=*.jpg
就像我说的那样,它不会给出 100% 的成功率......但这是我能想到的唯一一个可以在不发送任何请求的情况下给您一个想法的方法。跨度>
以上是关于如何在c#中检查url是文件类型还是网页类型?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中检查给定的 URL 是 HTTP 还是 HTTPS