11
votes

Téléchargez une URL en C ++

Je veux être capable de télécharger une URL en C ++. Quelque chose aussi simple que: xxx

idéalement, cela inclurait des URL comme:

  • ftp://example.com/myfile.dat
  • Fichier: ///sr/home/myfile.dat
  • https://example.com/myfile.html

    J'utilisais ASIO à Boost, mais il ne semblait pas vraiment avoir le code de traitement des protocoles tels que FTP et HTTPS. Maintenant, j'ai découvert Qt a plus de ce dont j'ai besoin ( http://doc.trolltech.com/2.3/network .html ).

    Il est tentant de rendre le commutateur à Qt, mais il semble un peu lourd et intersète beaucoup de fonctionnalités de boost. Cela vaut-il la peine d'apprendre une autre API (qt) ou peut booster plus que je ne le pense?


0 commentaires

6 Réponses :


24
votes

Pas une réponse directe, mais vous aimerez peut-être envisager libcurl , qui est presque exactement ce que vous décrivez.

Il existe des exemples d'applications ici , et en particulier Ce montre comment une utilisation simple peut être.


3 commentaires

+1 pour libcurl. Il est construit exactement pour cela. C'est plus une liaison C droite (il y a un wrapper C ++; ne l'a pas utilisé).


@Joe Avez-vous un exemple (en C) compilé avec Mingw pour Windows? J'ai besoin de ce même exemple pour Windows à l'aide de Mingw.


Mise à jour du lien vers "Simple.c" qui a déménagé.



4
votes

Je n'irais pas à Qt juste pour les trucs de réseautage, car ce n'est vraiment pas tout ce spectaculaire; Il y a beaucoup de morceaux manquants. Je ferais seulement basculer si vous avez besoin du truc de l'interface graphique, pour lequel il est top Notch.

libcurl est assez simple à utiliser et plus robuste que les trucs QT.


0 commentaires

2
votes

Le POCO Project dispose de classes de plate-forme inter-plate-forme HTTP et FTP (et beaucoup d'autres choses). Il y a du chevauchement avec boost. Je récemment a trouvé cela, mais ne l'avez pas utilisé. < / p>


0 commentaires

2
votes

Vous pouvez utiliser UrldownloadToFile ou UrlopenblockingStream , bien que Curl, libcurl sont les outils appropriés pour ce type d'emploi.


4 commentaires

Merci pour la mention de Urlopenblockingstream! Je ne pouvais trouver aucune bonne documentation sur elle n'importe où, outre les trucs rudimentaires sur MSDN, mais je l'ai finalement compris (voir ma réponse).


En passant, connaissez-vous la portée de ce que cela supporte, en termes de choses comme SSL, http 2, cookies, sessions et tout cela?


@Andrew, salut. Les docs disent que urlopenblockingstream nécessite IE3, de sorte qu'il soutient probablement les mêmes choses. Par exemple, voir CRYPTION IE3 . Je ne pense pas urlopenblockingstream prend en charge les cookies et les sessions.


HAHA IE3 ... Mais oui, j'ai un peu rassemblé cela de la documentation: les fonctions telles que URL ___ semblent être des abstractions majeures du reste de l'API "URL Monikers".



1
votes

Je l'ai travaillé sans libcurl ni winsock: https://stackoverflow.com/a/51959694/1599699

Spécial merci à Nick Dandoulakis pour suggérer UrlopenblockingStream! J'aime ça.


0 commentaires

1
votes

Vous pouvez utiliser URLDOWNLOADTOFILE .

#include <Urlmon.h>
    HANDLE hr;
    hr=URLDownloadToFile(NULL, L"http://www.example.com/myfile.html",L"mylocalfile.html",BINDF_GETNEWESTVERSION,NULL);


0 commentaires