2011-06-04 20 views
29

Büyük bir dosyanın URL'sinin olup olmadığını kontrol etmek istiyorum. Ben aşağıdaki kodu kullanıyorum ama çok yavaş:Sadece C# ile HTTP üstbilgisini istemek nasıl?

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

Gerçekten tüm başlıkların arasında dolaşmak zorunda mısın? – DOK

+4

@DOK Hayır ama başlıkları bu performans Bu da sorun olmayabilir –

+0

isabet sorumludur şüphe ama [MSDN} (http://msdn.microsoft.com/en-us/library/system görülen. net.httpwebresponse.aspx) Yanıtı kapatmak ve yeniden kullanım için bağlantıyı bırakmak için Stream.Close veya HttpWebResponse.Close yöntemini çağırmanız gerekir. – DOK

cevap

49

Sen ayarlamanız gerekir: Sunucu başlık bilgileri yalnızca (içerik) ile yanıt verecektir

webRequest.Method = "HEAD"; 

Bu şekilde. Bu, sunucunun belirli işlemleri (sıkıştırılmış veri vb.) Kabul edip etmediğini kontrol etmek için de yararlıdır.

+0

Bu, tüm web sunucularında çalışır mı? – Liam

+1

@Liam Ancak, hiçbir garanti yoktur. – Richard

+1

@Liam deneyimim,% 20 gibi önemli sayıda sitede çalışmadığı – oskarkv

İlgili konular