2008-09-23 24 views

Respuesta

84

Sí, suponiendo que el servidor HTTP que está hablando soportes/permite esto:

System.Net.WebRequest req = System.Net.HttpWebRequest.Create("http://stackoverflow.com/robots.txt"); 
req.Method = "HEAD"; 
using (System.Net.WebResponse resp = req.GetResponse()) 
{ 
    int ContentLength; 
    if(int.TryParse(resp.Headers.Get("Content-Length"), out ContentLength)) 
    { 
     //Do something useful with ContentLength here 
    } 
} 

Si no está permitido usar el método HEAD, o la cabecera Content-Length no está presente en la respuesta del servidor, la única forma de determinar el tamaño del contenido en el servidor es descargarlo. Como esto no es particularmente confiable, la mayoría de los servidores incluirán esta información.

+11

Si usa 'using', lo descarta automáticamente. http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.110).aspx – justderb

+2

Otra nota, si está utilizando esto para archivos extremadamente grandes 'int' no es suficiente, necesitará para usar 'long ContentLength;' y 'long.TryParse (xxx)' para admitir más de un valor de retorno de 2.14GB de tamaño. – Preston

+0

¿No se habilitará la compresión http para eliminar el tamaño real del archivo? – Justin

25

¿Se puede hacer esto con los encabezados HTTP?

Sí, este es el camino a seguir. Si se proporciona la información, está en el encabezado como Content-Length. Tenga en cuenta, sin embargo, que este no es necesariamente el caso.

Descargando solo el encabezado se puede hacer utilizando una solicitud HEAD en lugar de GET. Tal vez el código siguiente ayuda:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://example.com/"); 
req.Method = "HEAD"; 
long len; 
using(HttpWebResponse resp = (HttpWebResponse)(req.GetResponse())) 
{ 
    len = resp.ContentLength; 
} 

Aviso la propiedad de la longitud del contenido en el objeto HttpWebResponse - no hay necesidad de analizar la cabecera Content-Length manualmente.

+0

¿No 'resp.ContentLength' anterior le dará la longitud de la respuesta HEAD, y no la longitud del archivo que le interesaba obtener la sizeof? –

+1

@ Adam No. La documentación dice: "La propiedad ContentLength contiene el valor del encabezado Content-Length devuelto con la respuesta". –

+1

Correcto, gracias, Konrad. –

0
WebClient webClient = new WebClient(); 
webClient.OpenRead("http://stackoverflow.com/robots.txt"); 
long totalSizeBytes= Convert.ToInt64(webClient.ResponseHeaders["Content-Length"]); 
Console.WriteLine((totalSizeBytes)); 
Cuestiones relacionadas