2011-06-04 8 views
29

Quiero comprobar si existe la URL de un archivo grande. Estoy utilizando el código de abajo pero es demasiado lento:¿Cómo solicitar solo el encabezado HTTP con C#?

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

¿Realmente tiene que recorrer todos los encabezados? – DOK

+4

@DOK No, pero dudo que los encabezados sean responsables de este rendimiento. –

+0

Puede que este no sea el problema tampoco, pero lo vi en [MSDN} (http://msdn.microsoft.com/en-us/library/system. net.httpwebresponse.aspx) que debe llamar al método Stream.Close o HttpWebResponse.Close para cerrar la respuesta y liberar la conexión para su reutilización. – DOK

Respuesta

49

Es necesario configurar:

webRequest.Method = "HEAD"; 

De esta manera el servidor responderá con la información del encabezado solamente (sin contenido). Esto también es útil para verificar si el servidor acepta ciertas operaciones (es decir, datos comprimidos, etc.).

+0

¿Funcionará esto en todos los servidores web? – Liam

+1

@Liam Sin embargo, no hay garantía. – Richard

+1

@Liam mi experiencia es que no funciona en un número significativo de sitios, como el 20% – oskarkv

Cuestiones relacionadas