Pregunta

Muy bien, he pasado tres buenos días probando esto, aquí está el escenario:

Quiero descargar un archivo '.csv' de Google y luego hacer cosas con los datos del archivo. Es para una aplicación de consola Win32. Tengo la última opción hacia abajo, simplemente no puedo por la vida de mí averiguar cómo descargar el archivo. He oído hablar de libcurl, curlpp, ptypes, enrollando los míos, simplemente utilizando la API .NET, y me han dicho muchas veces:

  

... es solo una solicitud GET

Bueno, eso está muy bien, pero debo faltar algo porque parece que todos nacieron sabiendo cómo hacerlo. He estado revisando libros buscando resolver esto e incluso tuve un gran problema con LNKerrors después de viajar por la carretera con "The Art of C ++" por un momento.

Dicho todo esto, he aprendido MUCHO de esto, pero en este momento solo quiero saber cómo hacerlo. Falta la API para C ++, no se encuentra ningún código de ejemplo. Los tutoriales en línea son casi inexistentes. Y ningún libro parece pensar que esto es importante.

¿Puede alguien tirarme una balsa salvavidas? Soy un hombre al límite aquí.

edit

Por " de Google " Quiero decir que quiero descargar un archivo .csv que alojan. Un ejemplo puede ser encontrado aquí.

¿Fue útil?

Solución

Debería poder doblar esto a su voluntad.

Ahora que he respondido un poco tu pregunta. ¿Por qué C ++? Nada en contra del idioma, pero elija el mejor idioma para el trabajo. Perl, PHP y Python (y estoy seguro que más) tienen una gran documentación y soporte en este tipo de operación.

En perl (con el que estoy familiarizado) es de aproximadamente 3-5 líneas de código.

Otros consejos

¿Por qué no solo usar lo que ya está allí?

UrlDownloadToFile ()

Ya que está en la plataforma Win32, hay una biblioteca incorporada que puede usar para implementar una solicitud GET de una manera relativamente sencilla: WinInet, que es parte del SDK de Win32. La referencia básica para WinInet se puede encontrar en MSDN.

Tenga en cuenta que habrá algunos trineos por delante si no está familiarizado con la API de Win32. Hay un bloque bastante útil del código de ejemplo aquí

Obtendrá errores de vinculador si no puede agregar la referencia de biblioteca adecuada a su proyecto. Parece que ya aprendió algunas lecciones, así que lo mantendré breve, pero tenga la seguridad de que encontrará referencias tanto a las bibliotecas como a las referencias de archivos de encabezado que necesitará en la documentación de Win32 (solo tiene que aprender dónde) la página para buscarla).

No puedes hacer eso con la biblioteca estándar. Ya que es win32, puedes seguir el consejo de Paul Keister.

Pero echa un vistazo a libcurl , y como estás en C ++, te recomiendo POCO también es muy útil. ¡Son herramientas muy útiles!

Otra opción es WinHTTP , que También viene con Windows.

> no se puede encontrar un código de ejemplo

???

Se han publicado decenas de muestras durante 15 años ... Ver en la aplicación de noticias: //comp.os.ms-windows.programmer.win32 (muestras en C)

(COM, INET, etc.)

Yo también he estado buscando un buen http lib para C ++ pero no he encontrado el lib 'perfecto'. Boost.Asio es un nivel fantástico pero bastante bajo para una biblioteca http sencilla (a través de ejemplos de clientes http son un buen comienzo). La C ++ Networking Library * (cpp-netlib) parece que está en camino, construyendo una más alta -nivel api encima de asio, pero no es muy maduro. Echa un vistazo a la Ejemplo de http_client .

O bien voy a escribir mis propios envoltorios alrededor de asio o extenderlos (y contribuiré) a cpp-netlib a menos que pueda encontrar una mejor opción.

(Por cierto, libcurl no es una mejor opción para mí. Es una API mucho más grande de lo que quiero y muy difícil de manejar para algo como un cliente http, especialmente en C ++. No me malinterpretes, es una gran biblioteca pero no es apropiada para un cliente http simple.)

C ++ realmente no tiene una API per se. Para realizar una solicitud GET, su programa necesita abrir una conexión de socket TCP al sitio en cuestión y enviar la información a través del socket para cumplir con la especificación HTTP, consulte here . Probablemente hay una serie de bibliotecas que podría encontrar para ayudar con esto, por ejemplo, podría ver lo que utiliza el programa de código abierto wget. Si lo estás codificando, sería útil usar una herramienta de rastreo de paquetes. Puede ver exactamente lo que su navegador envía al servidor web para recuperar el archivo, y simplemente enviar exactamente ese mensaje. No es demasiado difícil, pero es bastante difícil. TCP es una curva de aprendizaje bastante grande inicialmente.

Por cierto, ¿qué quieres decir con " de google? "

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