Question

Bien, j'ai passé trois bons jours à essayer ceci, voici le scénario:

Je souhaite télécharger un fichier ".csv" à partir de Google, puis créer des éléments avec les données du fichier. C'est pour une application console Win32. J'ai le dernier en bas, je ne peux pas pour la vie de comprendre comment télécharger le fichier. J'ai entendu parler de libcurl, curlpp, des ptypes, rouler le mien, en utilisant simplement l'API .NET, et on m'a dit maintes fois:

  

... c'est juste une demande GET

Eh bien, tout va bien, mais je dois rater quelque chose car il semble que tout le monde est né en sachant faire cela. J'ai parcouru des livres à la recherche de solutions et j'ai même eu un gros problème avec LNKerrors après avoir parcouru la route avec "The Art of C ++". pour un moment.

Cela étant dit, j’en ai beaucoup appris, mais je veux simplement savoir comment le faire. L'API pour C ++ manque sérieusement, aucun exemple de code à trouver. Les tutoriels en ligne sont presque inexistants. Et aucun livre ne semble penser que c'est important.

Quelqu'un peut-il me lancer un radeau de sauvetage? Je suis un homme sur le bord ici.

modifier

Par "de Google" Je veux dire que je veux télécharger un fichier .csv qu’ils hébergent. Un exemple peut être trouvé ici.

Était-ce utile?

La solution

Vous devriez pouvoir courber ceci à votre guise.

Maintenant que j'ai un peu répondu à votre question. Pourquoi C ++? Rien contre la langue, mais choisissez la meilleure langue pour le travail. Perl, PHP et Python (et bien d’autres, j'en suis sûr) disposent tous d’une excellente documentation et d’une assistance technique sur ce type d’opérations.

En Perl (celui que je connais bien), il ne s’agit que de 3 à 5 lignes de code.

Autres conseils

Pourquoi ne pas simplement utiliser ce qui existe déjà?

UrlDownloadToFile ()

Puisque vous êtes sur la plate-forme Win32, il existe une librairie intégrée que vous pouvez utiliser pour implémenter une requête GET de manière relativement relativement simple: WinInet, qui fait partie du SDK Win32. La référence de base pour WinInet est disponible sur MSDN.

Soyez averti qu'il y aura quelques traîneaux difficiles si vous n'êtes pas familier avec l'API Win32. Il existe un bloc d’exemples de code assez utile, ici

Vous obtiendrez des erreurs de l'éditeur de liens si vous ne parvenez pas à ajouter la référence de bibliothèque appropriée à votre projet. On dirait que vous en avez déjà appris quelques leçons, je vais donc garder ça bref, mais soyez assuré que vous trouverez des références aux bibliothèques et aux références de fichier d’entête dont vous aurez besoin dans la documentation Win32 (vous devez simplement savoir où la page à chercher).

Vous ne pouvez pas faire cela avec la bibliothèque standard. Comme il s'agit de win32, vous pouvez suivre les conseils de Paul Keister.

Mais jetez un coup d'oeil à libcurl , et puisque vous êtes en C ++, je vous le recommande. POCO , il est également très utile. Ce sont des outils très pratiques!

Une autre option est WinHTTP , qui vient également avec Windows.

> aucun exemple de code à trouver

???

Des dizaines d'échantillons ont été postés depuis 15 ans. Voir les dernières nouvelles: //comp.os.ms-windows.programmer.win32 (échantillons en C)

(COM, INET, etc.)

Moi aussi, je cherchais une bonne librairie http pour C ++, mais je n’ai pas trouvé la librairie "parfaite". Boost.Asio est fantastique mais assez bas pour une bibliothèque http simple (bien que exemples de clients http sont un bon début). La bibliothèque de mise en réseau C ++ * (cpp-netlib) semble être sur la bonne voie, en construisant une niveau-api sur asio, mais n'est pas très mature. Découvrez le exemple http_client .

Je vais soit écrire mes propres wrappers sur asio, soit étendre (et contribuer) à cpp-netlib à moins que je ne puisse trouver une meilleure option.

(BTW libcurl n'est pas une meilleure option pour moi. C'est une API beaucoup plus grande que ce que je veux et très difficile à manier pour quelque chose comme un client http, en particulier en C ++. Ne vous méprenez pas, c'est une excellente bibliothèque mais ne convient pas à un simple client http.)

C ++ n’a pas vraiment d’API en soi. Pour faire une demande GET, votre programme doit ouvrir une connexion de socket TCP sur le site en question et envoyer les informations via le socket pour se conformer à la spécification HTTP. Voir ici . Il existe probablement plusieurs bibliothèques que vous pourriez trouver pour vous aider, par exemple, vous pouvez regarder ce que le programme open source utilise wget. Si vous le codez vous-même, il serait utile d'utiliser un outil de détection de paquets. Vous pouvez voir exactement ce que votre navigateur envoie au serveur Web pour récupérer le fichier et simplement envoyer ce message. Ce n'est pas trop difficile, mais c'est assez difficile. Au départ, TCP est une courbe d’apprentissage assez longue.

Au fait, qu'entendez-vous par "de google?"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top