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 结尾,但它显然不是图片:

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();
    }
}