2011-06-04 50 views
29

我想檢查一個大文件的URL是否存在。我使用下面的代碼,但實在是太慢了:如何僅請求與C#HTTP頭?

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; 
} 
+0

你真的要循環所有的標題嗎? – DOK 2011-06-04 15:52:48

+4

@DOK Nope,但我懷疑這些頭文件是否對此性能造成影響 – 2011-06-04 15:53:54

+0

這可能不是問題,但我在[MSDN}(http://msdn.microsoft.com/zh-cn/library/system。 net.httpwebresponse.aspx)必須調用Stream.Close或HttpWebResponse.Close方法來關閉響應並釋放連接以供重用。 – DOK 2011-06-04 15:56:20

回答

49

您需要設置:

webRequest.Method = "HEAD"; 

這樣服務器將與頭信息只(沒有內容)響應。這對於檢查服務器是否接受某些操作(即壓縮數據等)也很有用。

+0

這將在所有Web服務器上工作嗎? – Liam 2016-01-19 13:38:10

+1

@Liam它應該,但是沒有保證。 – Richard 2016-01-19 13:54:33

+1

@Liam我的經驗是,它不適用於大量的網站,比如20% – oskarkv 2016-02-02 12:00:21