Pregunta

Estoy tratando de conseguir un montón de archivos HTML descargados de Internet y el uso de HttpWebRequest para hacerlo.

Sin embargo, cuando yo uso

WebRequest.Create ( " http://www.stackoverflow.com/ "); WebRequest.GetResponse ();

El HttpWebResponse.ContentLength es siempre -1. Tengo que mostrar el progreso de la descarga de estas páginas, en nuestra versión VB6 existente que estamos usando el control inet y los informes de los avances muy bien.

Mi código es muy similar a la siguiente:

http://www.geekpedia.com/tutorial179_Creating -a-descarga-manager-en-Csharp.html

(El método 'Descargar' que es)

No estoy seguro de lo que estoy haciendo mal o si sus normales - no hay cabecera Content-Length enviado por el servidor web. ¿Cómo hacer que el progreso de entrenamiento en este caso?

Gracias,

¿Fue útil?

Solución

Aquí hay una muestra usando cliente Web usted podría intentar:

class Program
{
    static void Main(string[] args)
    {
        var client = new WebClient();
        client.DownloadProgressChanged += (sender, e) =>
        {
            Console.WriteLine("{0}% completed", e.ProgressPercentage);
        };
        client.DownloadStringCompleted += (sender, e) =>
        {
            // e.Result contains downloaded string
            Console.WriteLine("finished downloading...");
        };
        client.DownloadStringAsync(new Uri("http://www.stackoverflow.com"));
        Console.ReadKey();
    }
}

Si decide utilizarlo en una aplicación Windows Forms asegúrese de llamar InvokeRequired / Invocar patrón de controladores de eventos, ya que no se ejecutan en el subproceso de interfaz de usuario.

Otros consejos

Si el servidor web no envía una longitud de contenido, no hay manera de saber cuánto más datos que hay, por lo que es básicamente imposible saber en qué medida a través de él se encuentre.

Heck, el servidor puede estar generando datos de forma dinámica y Todavía no sabe (cuando llegue a la primera parte de los datos) cómo muchos más datos que tiene que enviar.

Cualquier cosa que reclamos que se muestra el progreso (como proporción del tamaño de la descarga completa) está mintiendo o está descargando los datos de una manera diferente que ¿Tiene Dales el tamaño completo. Por supuesto, si usted está descargando varios archivos siempre se puede decir que la cantidad de archivos que haya terminado la descarga y cuántos todavía tienes para descargar (aunque incluso en este caso el número de estos últimos no se conozca si está haciendo una aplicación de estilo rastreador).

Tenga en cuenta que un enfoque común es mostrar una barra de progreso que indica "estoy progresando", pero no tratar de adivinar cuánto queda para descargar.

El código en el método de descarga () en el artículo enlazado depende de los miembros privados de la clase, por lo que aunque

WebRequest.Create("http://www.stackoverflow.com");

podría compilar, en realidad es llamar a un método en el class WebRequest, después de descartar el resultado, que es cuando la solicitud se almacena. En el momento en la línea

WebRequest.GetResponse();

se llama, el código ha olvidado por completo de la respuesta de Crear (). (C # es sensible a mayúsculas, por lo WebRequest y WebRequest no son la misma cosa;. Y es bastante convencional para dar el nombre WebRequest a una instancia de la clase WebRequest)

Así que trate de poner las líneas

private HttpWebRequest webRequest;
private HttpWebResponse webResponse;

fuera del método en la parte superior de la clase como instancias de los objetos WebRequest y WebResponse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top