如何使用C#仅请求HTTP头?

如何使用C#仅请求HTTP头?,c#,.net,httpwebrequest,system.net,C#,.net,Httpwebrequest,System.net,我想检查一个大文件的URL是否存在。我正在使用下面的代码,但速度太慢: public static bool TryGet(string url) { try { GetHttpResponseHeaders(url); return true; } catch (WebException) { } return false; } public static Dictionary<string, s

我想检查一个大文件的URL是否存在。我正在使用下面的代码,但速度太慢:

public static bool TryGet(string url)
{
    try
    {
        GetHttpResponseHeaders(url);
        return true;
    }
    catch (WebException)
    {
    }

    return false;
}

public static Dictionary<string, string> GetHttpResponseHeaders(string url)
{
    Dictionary<string, string> headers = new Dictionary<string, string>();
    WebRequest webRequest = HttpWebRequest.Create(url);
    using (WebResponse webResponse = webRequest.GetResponse())
    {
        foreach (string header in webResponse.Headers)
        {
            headers.Add(header, webResponse.Headers[header]);
        }
    }

    return headers;
}
publicstaticbooltryget(字符串url)
{
尝试
{
GetHttpResponseHeaders(url);
返回true;
}
捕获(WebException)
{
}
返回false;
}
公共静态字典GetHttpResponseHeaders(字符串url)
{
字典头=新字典();
WebRequest WebRequest=HttpWebRequest.Create(url);
使用(WebResponse WebResponse=webRequest.GetResponse())
{
foreach(webResponse.Headers中的字符串头)
{
headers.Add(header,webResponse.headers[header]);
}
}
返回标题;
}
您需要设置:

webRequest.Method = "HEAD";

这样,服务器将只响应标题信息(无内容)。这对于检查服务器是否接受某些操作(如压缩数据等)也很有用。

您真的必须循环遍历所有的头吗?@DOK Nope,但我怀疑头是否负责此性能问题这可能也不是问题,但我在[MSDN}()您必须调用Stream.Close或HttpWebResponse.Close方法来关闭响应并释放连接以供重用。@DOK我相信
using
指令已经为我做到了这一点。@Liam应该这样做,但不能保证。@Liam我的经验是,它在相当多的站点上都不起作用,比如说20%的站点在我的案例中,它返回content!ContentLegnth不是-1。