2011-07-21 29 views
6

Intentando descargar el archivo en el código.Cómo usar HttpWebRequest para descargar el archivo

código actual:

Dim uri As New UriBuilder 
    uri.UserName = "xxx" 
    uri.Password = "xxx" 
    uri.Host = "xxx" 
    uri.Path = "xxx.aspx?q=65" 

    Dim request As HttpWebRequest = DirectCast(WebRequest.Create(uri.Uri), HttpWebRequest) 

    request.AllowAutoRedirect = True 

    request = DirectCast(WebRequest.Create(DownloadUrlIn), HttpWebRequest) 
    request.Timeout = 10000 
    'request.AllowWriteStreamBuffering = True 

    Dim response As HttpWebResponse = Nothing 
    response = DirectCast(request.GetResponse(), HttpWebResponse) 
    Dim s As Stream = response.GetResponseStream() 

    'Write to disk 
    Dim fs As New FileStream("c:\xxx.pdf", FileMode.Create) 

    Dim read As Byte() = New Byte(255) {} 
    Dim count As Integer = s.Read(read, 0, read.Length) 
    While count > 0 
     fs.Write(read, 0, count) 
     count = s.Read(read, 0, read.Length) 
    End While 

    'Close everything 
    fs.Close() 
    s.Close() 
    response.Close() 

La ejecución de este código y comprobar el response.ResponseUri indica im siendo redirigidos a la página de inicio de sesión y no con el archivo PDF.

Por alguna razón, no está autorizando el acceso ¿qué podría extrañar ya que estoy enviando el nombre de usuario y la contraseña en el uri? Gracias por su ayuda

+0

¿La página realmente permite la autorización a través de la url? ¿O necesita autorizar a través de una interfaz web que establece una cookie? Estoy adivinando el último, en cuyo caso necesitarás realizar 2 solicitudes, 1 para iniciar sesión y almacenar la cookie, el segundo para solicitar el pdf (usando la cookie) – Steve

+0

El código me dio un buen comienzo para realizar mi descarga. Gracias amigo – MiBol

Respuesta

4

No es necesario que todos código para descargar un archivo desde la red sólo tiene que utilizar la clase WebClient y su método DownloadFile

+0

Lo he intentado pero con el mismo problema que está redirigiendo a la página de inicio de sesión. – David

0

debe comprobar y ver si el sitio requiere cookies (la mayoría hacer), usaría un analizador de paquetes y ejecutaría su código y vería exactamente qué devuelve el servidor. use el violín o el analizador http para registrar paquetes

+0

Las herramientas de desarrollador de Chrome o Firefox con Firebug deberían ser suficientes para determinar la existencia de cookies y los encabezados de solicitud y respuesta reales. Pero existen métodos más sofisticados de detección de secuencias de comandos en algunas aplicaciones web. – scones

0

Con UWP, esto se ha convertido en una pregunta más pertinente ya que UWP no tiene un WebClient. La respuesta correcta a esta pregunta es si está siendo redirigido a la página de inicio de sesión, entonces debe haber un problema con sus credenciales O el encabezado de configuración (o falta de) para el HttpWebRequest.

Según Microsoft, la solicitud de descarga se envía con la llamada a GetResponse() en el HttpWebRequest, por lo tanto, el archivo descargado debe estar en la corriente en la respuesta (devuelto por la llamada GetResponse() mencionado anteriormente).

Cuestiones relacionadas