2011-06-04 18 views
29

मैं यह जांचना चाहता हूं कि बड़ी फ़ाइल का URL मौजूद है या नहीं। मैं नीचे दिए गए कोड का उपयोग कर रहा है, लेकिन यह बहुत धीमी है:सी # के साथ केवल 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

+4

@ डीओके नोप, लेकिन मुझे संदेह है कि हेडर जिम्मेदार हैं इस प्रदर्शन हिट –

+0

यह समस्या नहीं हो सकती है, लेकिन मैंने [एमएसडीएन} (http://msdn.microsoft.com/en-us/library/system] में देखा है। net.httpwebresponse.aspx) कि आपको स्ट्रीम को बंद करना होगा या बंद करें। HttpWebResponse. प्रतिक्रिया बंद करने के लिए विधि बंद करें और पुन: उपयोग के लिए कनेक्शन जारी करें। – DOK

उत्तर

49

आप स्थापित करने की आवश्यकता:

webRequest.Method = "HEAD"; 

इस तरह सर्वर हेडर सूचना केवल (कोई सामग्री) के साथ जवाब देंगे। यह जांचने के लिए भी उपयोगी है कि सर्वर कुछ परिचालन स्वीकार करता है (यानी संपीड़ित डेटा इत्यादि)।

+0

क्या यह सभी वेब सर्वरों पर काम करेगा? – Liam

+1

@ लीम यह होना चाहिए, हालांकि कोई गारंटी नहीं है। – Richard

+1

@Liam मेरा अनुभव यह है कि यह साइटों की एक बड़ी संख्या पर काम नहीं करता है, जैसे 20% – oskarkv