none
Problema al descargar un archivo csv desde una url RRS feed

  • Pregunta

  • Hola,

    Trabajo con Visual Studio 2010 y os cuento el problema que me ha surgido. Me han encargado que de forma a una funcionalidad en un software de forma que este descargue un archivo .csv alojado en una url y lo guarde en una carpeta determinada de mi pc.

    Para ello he utilizado:

     Dim strRutaArchivo As String = ""
     Dim strRutaGuardarArchivo As String = "D:\ArchivosHistoricos\"
     Dim web As New WebClient
    
    strRutaArchivo = "https://www.carnesraf.com/articulos/excel/" & tbIdActivos.Rows(i).Item(1)
    strRutaGuardarArchivo = strRutaGuardarArchivo & tbIdActivos.Rows(i).Item(1) & ".csv"
    web.DownloadFile(strRutaArchivo, strRutaGuardarArchivo)

    Pues bien, resulta que el archivo que descargo de esta manera tiene el siguiente aspecto:

    Cuando en verdad el archivo que descargo a través de cualquier explorador indicando la url en concreto es un archivo csv cuyo contenido tiene el siguiente aspecto:

    Por ello os consulto qué puede estar ocurriendo en mi codigo. ¿por qué el archivo descargado me muestra esa información totalmente distinta a como es el archivo original?

    Muchas gracias

    Angel

    martes, 9 de febrero de 2016 23:09

Respuestas

  • ¿quizás la forma en que estoy solicitando la descarga con web.downloadfile no equivale a poner la url en el navegador y acceder a ella?

    No, no es equivalente. El navegador añade a la petición HTTP varias cabeceras, tales como el UserAgent, el Accept, el Host, el idioma, las cookies, y varias otras, que el servidor puede analizar (si es que lo han programado para que así lo haga) y en consecuencia distinguir si la petición viene de un navegador o viene de una instrucción ejecutada desde programa (que no lleva esas cabeceras).

    Si realmente ese fuera el caso, podrías hacer la petición desde un navegador habiendo previamente activado una captura de red con las F12 tools. Después examinas el tráfico capturado y te fijas en cuáles fueron las cabeceras que transmitió el navegador. Y entonces, en tu programa, usa un HttpRequest para comunicar con el servidor, agregándole todas las cabeceras (o las que sean necesarias, después de experimentar con ellas).

    miércoles, 10 de febrero de 2016 15:04

Todas las respuestas

  • No te está descargando un CSV, te está descargando una página HTML. Deberías examinar la página al completo a ver qué pone, a lo mejor te está escribiendo un mensaje diciendo que no tienes permiso para hacer esa descarga, o te está redirigiendo a una ventana de login, o algo por el estilo. Lee el HTML entero a ver qué dice.
    miércoles, 10 de febrero de 2016 6:22
  • Hola Alberto,

    Gracias por tu respuesta.

    He revisado el contenido entero de la excel que obtengo y es una copia exacta del código fuente en html de la pagina principal de la cual intento descargar el archivo csv.

    Lo curioso es que estoy logueado en la misma y si pongo en mi navegador la url https://www.carnesraf.com/articulos/excel/codigoarticulo se me descarga sin ningún problema a mi navegador.

    Pero si ejecuto el código que te he puesto me descargo un .csv con el código fuente mencionado. Mi pregunta es

    ¿quizás la forma en que estoy solicitando la descarga con web.downloadfile no equivale a poner la url en el navegador y acceder a ella?

    miércoles, 10 de febrero de 2016 12:07
  • ¿quizás la forma en que estoy solicitando la descarga con web.downloadfile no equivale a poner la url en el navegador y acceder a ella?

    No, no es equivalente. El navegador añade a la petición HTTP varias cabeceras, tales como el UserAgent, el Accept, el Host, el idioma, las cookies, y varias otras, que el servidor puede analizar (si es que lo han programado para que así lo haga) y en consecuencia distinguir si la petición viene de un navegador o viene de una instrucción ejecutada desde programa (que no lleva esas cabeceras).

    Si realmente ese fuera el caso, podrías hacer la petición desde un navegador habiendo previamente activado una captura de red con las F12 tools. Después examinas el tráfico capturado y te fijas en cuáles fueron las cabeceras que transmitió el navegador. Y entonces, en tu programa, usa un HttpRequest para comunicar con el servidor, agregándole todas las cabeceras (o las que sean necesarias, después de experimentar con ellas).

    miércoles, 10 de febrero de 2016 15:04
  • Hola:

     Quizas no aporte demasiado pero otra de las cosas que deberías de validar es que la dirección web que armas sea realmente una valida.

     Otra cosa que a mi me ocurrió una ves, es el uso de caracteres especiales en el nombre del archivo, es decir, considera no usar comas, comillas simples y todos aquellos caracteres que pudieran interpretarse de otra forma en el proceso.


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 11 de febrero de 2016 0:45