2014-05-24 6 views
29

So habe ich Seiten und Seiten der Suchergebnisse auf StackOverflow und Google durchforstet und bin auf sehr wenige C/C++ HTTP Client Bibliotheken gestoßen, die für eine ressourcenbeschränkte, eingebettete Umgebung geeignet sind (zB ein ARM). Ich bin jedoch auf einige, die für Desktop-Anwendungen geeignet sind, gestoßen.C/C++ HTTP Client Bibliothek für Embedded Projekte

Im Wesentlichen bin ich nach einer einfachen, einfach zu bedienenden und praktischen API, um HTTP-GET, POST und HEAD Anrufe (mit Unterstützung für die Authentifizierung, Download Lebenslauf und Nutzlast-Komprimierung). Es wäre ideal, wenn es einen kleinen Footprint (d. H. Keine oder minimale externe Abhängigkeiten) hätte und Open-Source (mit einer permissiven Lizenz) wäre.

Hier ist eine Liste von dem, was ich bislang gekommen sind und warum sie nicht geeignet sind -

  • curl - zu Schwergewicht
  • poco - zu Schwergewicht
  • neon - GPL
  • qlibc - setzt auf POSIX-Bibliotheken
  • cpp-netlib - stützt sich auf Boost-Bibliotheken
  • serf - beruht auf der Apache Portable Runtime-Bibliothek
  • urdl - setzt auf Boost-Bibliotheken
  • HTTP Client C API - vielversprechend, aber erfordert eine C++ Wrapper

Gibt es Bibliotheken gibt, die ich bin nicht bewusst, oder bin Ich mache lieber meine eigenen?

+1

Während meiner HTTP-Client-Erfahrung mit eingebetteten und begrenzten Geräten, entwickelte ich eine einfache HTTP-Client-Bibliothek in C von mir. Alle oben genannten Lösungen sind schwergewichtig oder haben zu viele Abhängigkeiten. Paolo. – ppatierno

Antwort

12

Haben Sie sich den HTTPClient auf mbed angesehen? Sieht so aus, als gäbe es viele Gabeln eines Originals von vor ein paar Jahren, das nicht gepflegt wurde. Ich habe nicht verwendet ...

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

+0

Das sieht vielversprechend aus! Ich werde das ausprobieren, danke! – thegreendroid

+0

Dieser ist definitiv mit ein paar Verbesserungen verwendbar, danke! – thegreendroid

+1

Ich habe für so etwas gegoogelt, und es stellt sich heraus, dass der Autor im selben Gebäude arbeitet wie ich ... – weberc2

1

Ich kann nur beschreiben, was ich für diese Aufgaben verwendet habe.

curl - wenn Sie faul sind, können Sie einfach in gebaute Binärdatei herunterladen und nichts mehr zu tun haben, es hat sehr einfache Header und viele Beispiele. Sie benötigen 3-4 bereits erstellte Bibliotheken und Header. Ohne externe Abhängigkeiten. Also würde ich es als zu niedrig, aber nicht als Schwergewicht bezeichnen.

boost.asio - sehr interessantes Paradigma der Realisierung, ziemlich einfach und sauber. Aber ich würde sagen, es ist auch Low-Level. Härter dann curl. Und ich brauche Boost, das ist die externe Abhängigkeit, die du vermeiden willst.

poco - beste Lösung für HTTP-Server. Es ist ein hohes Niveau, nachdem Sie es zu Ihrer Anwendung hinzugefügt haben, müssen Sie nur einige virtuelle Funktionen implementieren, alle anderen Arbeiten (und Thread-Management) erledigt zu haben. Poco gibt eine Menge für Anwendungsmanagement, Thread-/Prozessmanagement und es ist sehr einfach und leicht, ich würde sogar sagen, dass es eine Java-ähnliche Oberfläche hat. Ja, es gibt eine externe Abhängigkeit von poco, aber ich würde dies als eine Chance betrachten, perfekte Bibliothek zu lernen. Dennoch, für HTTP-Clients ist es wirklich schwer.

Das ist alles meine C++ Erfahrung mit HTTP. Zählen Sie brauchen nur Client und keine Abhängigkeiten, würde ich Ihnen anbieten, libcurl Bibliothek zu betrachten. Es ist plattformübergreifend, einfach, ohne Abhängigkeiten und auf niedrigem Niveau, um alles zu bekommen, was Sie im Netzwerk benötigen. Und wenn Sie Zeit haben - schauen Sie sich Poco an, wirklich, ich glaube, Sie werden sich in diese Bibliothek genauso wie ich verliebt haben. Hoffe das wird hilfreich sein.

+0

Danke für die Antwort! Diese Bibliotheken sind für das Projekt, an dem ich gerade arbeite, zu schwergewichtig, aber ich kann es einfach nicht rechtfertigen, eine so große Bibliothek zu ziehen. – thegreendroid