web-dev-qa-db-fra.com

Bibliothèque client HTTP C / C ++ pour projets intégrés

J'ai donc parcouru des pages et des pages de résultats de recherche sur StackOverflow et Google et j'ai rencontré très peu de bibliothèques client HTTP C/C++ adaptées à un environnement intégré limité par les ressources (par exemple, un ARM). J'en ai cependant rencontré pas mal qui conviennent aux applications de classe bureau.

Essentiellement, je recherche une API simple, facile à utiliser et pratique pour faire HTTP GET, POST et HEAD appels (avec prise en charge de l'authentification, téléchargement) Il serait idéal s'il avait une faible empreinte (c.-à-d. aucune ou peu de dépendances externes) et était open-source (avec une licence permissive).

Voici une liste de ce que j'ai rencontré jusqu'à présent et pourquoi ils ne conviennent pas -

  • curl - trop lourd
  • poco - trop lourd
  • néon - GPL
  • qlibc - s'appuie sur les bibliothèques POSIX
  • cpp-netlib - s'appuie sur les bibliothèques Boost
  • serf - s'appuie sur la bibliothèque Apache Portable Runtime
  • rdl - s'appuie sur les bibliothèques Boost
  • API client HTTP C - prometteur mais nécessite un wrapper C++

Y a-t-il des bibliothèques que je ne connais pas ou est-ce que je ferais mieux de rouler les miennes?

36
thegreendroid

Avez-vous jeté un œil au HTTPClient sur mbed? On dirait qu'il y a beaucoup de fourches d'un original d'il y a quelques années qui n'ont pas été entretenues. Je ne l'ai pas utilisé ...

http://mbed.org/users/WiredHome/code/HTTPClient/

13
escrafford

Je peux simplement décrire ce que j'ai utilisé pour ces tâches.

curl - si vous êtes paresseux, vous pouvez simplement télécharger en binaire intégré et n'avez rien à faire de plus, il a des en-têtes très simples et beaucoup d'exemples. Vous aurez besoin de 3-4 bibliothèques et en-tête déjà construits. Sans dépendances externes. Donc, je le considérerais comme un niveau trop bas, mais pas du tout lourd.

boost.asio - paradigme de réalisation très intéressant, assez simple et propre. Mais je dirais que c'est aussi de bas niveau. Plus difficile alors curl . Et doit utiliser boost, c'est la dépendance externe que vous voulez éviter, je suppose.

poco - meilleure solution pour le serveur http. C'est un niveau élevé, après l'avoir joint à votre application, il vous suffit d'implémenter quelques fonctions virtuelles, tout le travail (et la gestion des threads) étant effectué. Poco donne beaucoup de choses pour la gestion des applications, la gestion des threads/processus et c'est très simple et facile, je dirais même qu'il a une interface de type Java. Oui, il existe une dépendance externe à poco , mais je considérerais cela comme une chance d'apprendre une bibliothèque parfaite. Pourtant, pour les clients http, c'est vraiment lourd.

C'est toute mon expérience C++ avec HTTP. En comptant que vous avez juste besoin d'un client et que vous n'avez pas besoin de dépendances, je vous propose de regarder la bibliothèque libcurl . Il est multiplateforme, facile, sans dépendances et suffisamment bas pour obtenir tout ce dont vous avez besoin avec le réseau. Et si vous en avez le temps - regardez Poco, vraiment, je crois que vous serez tombé amoureux de cette bibliothèque comme moi. J'espère que cela vous sera utile.

3
Arkady

J'en ai trouvé un autre, qui a juste besoin d'être emballé dans une lib. ne l'a pas testé, mais peut valoir le coup d'œil:

https://github.com/reagent/http.git

3
Andik