c#中如何判断url是文件类型还是网页类型?
how to check url is file type or webpage type in c#?
我已经用 C# 编写了应用程序来抓取网站。
现在我有一个问题
我可以确定这个 URL 指向一个文件或一个网页!
我怎样才能解决这个问题而不必发送请求 URL?
在不发送任何请求的情况下,我唯一能想到的就是检查 url 末尾的文件扩展名。这不会给您 100% 的成功率,因为您可以使用不以扩展名结尾的 url 发送文件。也就是说,通常的做法是让文件 url 以扩展名
结尾的文件名
你要求做的事情实际上是不可能的。 URLs 不 'lead to files or web pages.' 它们被路由到请求处理程序。请求处理程序可以 return HTML 响应或文件下载或其他类型的响应。 “.html”或“.pdf”等一些扩展名暗示了响应的类型。但是 URL 可能有一个不指示响应类型的扩展名,或者(就像在这个页面上一样)根本没有扩展名。
您无法仅通过 URL 确定 HTTP 请求的响应类型。
您不能不发送请求...因为统一资源定位符无法与文件系统路径相提并论。例如,虽然下面的 url 以 .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();
}
}
我已经用 C# 编写了应用程序来抓取网站。 现在我有一个问题 我可以确定这个 URL 指向一个文件或一个网页! 我怎样才能解决这个问题而不必发送请求 URL?
在不发送任何请求的情况下,我唯一能想到的就是检查 url 末尾的文件扩展名。这不会给您 100% 的成功率,因为您可以使用不以扩展名结尾的 url 发送文件。也就是说,通常的做法是让文件 url 以扩展名
结尾的文件名你要求做的事情实际上是不可能的。 URLs 不 'lead to files or web pages.' 它们被路由到请求处理程序。请求处理程序可以 return HTML 响应或文件下载或其他类型的响应。 “.html”或“.pdf”等一些扩展名暗示了响应的类型。但是 URL 可能有一个不指示响应类型的扩展名,或者(就像在这个页面上一样)根本没有扩展名。
您无法仅通过 URL 确定 HTTP 请求的响应类型。
您不能不发送请求...因为统一资源定位符无法与文件系统路径相提并论。例如,虽然下面的 url 以 .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();
}
}