Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Coding Releases > Coding Snippets
You last visited: Today at 18:02

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C++] Simple libcurl Wrapperklassen

Discussion on [C++] Simple libcurl Wrapperklassen within the Coding Snippets forum part of the Coding Releases category.

Reply
 
Old   #1

 
Delinquenz's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
[C++] Simple libcurl Wrapperklassen

Hallo,
da curlpp mit der neusten Version der libcurl zickt und ich nur ungern bei den etlichen Webanfragen in meinem Projekt mit Pointern rumhantieren möchte, habe ich mir dafür ein paar Klassen geschrieben, die mir das erleichtern sollen. C++11 wird vorausgesetzt.

Ein simples Beispiel
Code:
#include <iostream>
#include <string>

#include "curl.hpp"

int main()
{
    curl::global::init();

    std::string buffer;
 
    curl::easy request;

    if (!request)
        std::cerr << "Curl could not get initialized." << std::endl;

    request.set_opt(CURLOPT_URL, "http://www.example.com");
    request.set_opt(CURLOPT_WRITEDATA, &buffer);
    request.set_opt(CURLOPT_WRITEFUNCTION, curl::write::to_string);

    if (!request.perform())
        std::cerr << "Error: " << request.get_error() << std::endl;

    std::cout << "Content: " << buffer << std::endl;

    curl::global::cleanup();
}
Insgesamt ist alles ziemlich selbsterklärend. curl::form wird nur für multipart/form-data Requests benötigt. Für normale Post-Requests reicht CURLOPT_POSTFIELDS mit einem String.

Finden tut man .

Ich hoffe auf konstruktive Kritik und Verbesserungsvorschläge.
Delinquenz is offline  
Old 02/11/2014, 14:43   #2


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,913
Received Thanks: 25,413
Quote:
Ich bin noch am überlegen, wie ich überprüfe, ob curl_easy_init() erfolgreich war. Ich möchte das möglichst ohne Exceptions lösen und noch weniger möchte ich im Konstruktor eine Exception werfen. Die Klassen sind eher simpel, da sie eigentlich nur für das Projekt vorgesehen waren.
Warum?
MrSm!th is offline  
Old 02/15/2014, 13:16   #3

 
Delinquenz's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
Quote:
Ich bin noch am überlegen, wie ich überprüfe, ob curl_easy_init() erfolgreich war. Ich möchte das möglichst ohne Exceptions lösen und noch weniger möchte ich im Konstruktor eine Exception werfen. Die Klassen sind eher simpel, da sie eigentlich nur für das Projekt vorgesehen waren.
Weil das in Verbindung mit einer kleinen Wrapperklasse 1.) zu aufwendig ist und 2.) die Fehlerüberprüfung mit get_error() total reicht und den Code minimaler hält, als 15 verschiedene Exceptions fangen zu müssen. Mal schauen, vielleicht ändere ich das noch. Im Moment würde das Ganze einfach zu aufwendig werden für meine kleinen Projekte.

Edit:
Neue Version veröffentlicht.

Changelog:
- Stilistische Anpassungen (maximale Breite 120 Zeichen, etc.)
- Standardkonstruktor für curl::header
- curl::easy:.operator bool() hinzugefügt, um eine Überprüfung von curl_easy_init() zur Verfügung zu stellen
- curl::easy::set_opt<T>(CURLoption, T) hat nun 3 Überladungen für std::string, curl::form und curl::header um das Aufrufen der std::string::c_str(), curl::form::get_form() und curl::header::get_header() Funktionen automatisch zu tätigen.
- Die WRITEFUNCTION curl::write::nowhere gibt es nun, um CLI-Ausgaben zu vermeiden, wenn man ein GET-Request machen möchte, ohne, dass man den Inhalt verarbeiten möchte.

Mal schauen, ob ich das Ganze auf github packe.
Delinquenz is offline  
Old 03/08/2014, 14:09   #4

 
Delinquenz's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
Habe einiges geändert. Da ich leider noch sehr neu bin, was VCS angeht, sind die Commits nicht wirklich sinnvoll strukturiert und deshalb zu ignorieren :S

Würde gern Feedback hören. Ich schaue die Tage noch, wie ich den = Operator und den Copy-Konstruktor mache (momentan deaktiviert, da kopierte Pointer total sinnlos sind und nur Stress machen würden), Constness anpassen und eventuell Exceptions reinbringen.

Zudem wollte ich fragen, ob ich das Ganze einmal in der C++ Sektion posten darf. Hier wird es vermutlich kaum einer sehen.
Delinquenz is offline  
Old 03/08/2014, 14:22   #5


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by Delinquenz View Post
Zudem wollte ich fragen, ob ich das Ganze einmal in der C++ Sektion posten darf. Hier wird es vermutlich kaum einer sehen.
Warum sollte es hier niemand sehen und was macht das für einen Unterschied? Diese Sektion wurde doch extra für so etwas geschaffen, warum also dann woanders posten?
Mostey is offline  
Thanks
1 User
Old 03/08/2014, 14:59   #6

 
Delinquenz's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
Quote:
Warum sollte es hier niemand sehen und was macht das für einen Unterschied? Diese Sektion wurde doch extra für so etwas geschaffen, warum also dann woanders posten?
Weil ich dort vermutlich mehr Feedback kriege und ich somit die Qualität dieser Klassen steigern kann.
Delinquenz is offline  
Old 03/08/2014, 16:04   #7


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by Delinquenz View Post
Weil ich dort vermutlich mehr Feedback kriege und ich somit die Qualität dieser Klassen steigern kann.
Kann ich verstehen, das müsste dann aber auch für alle gelten, die hier ihre Klassen posten. Das würde die Sektion wiederum unnötig machen.

Außerdem bin ich mir ziemlich sicher, das hier auch genauso viele Leute reinschauen. Es wird halt nicht viel geschrieben. (Warum sollten die User sich auch zu jedem Snippet / zu jeder Klasse äußern wollen)
Mostey is offline  
Old 03/08/2014, 16:23   #8


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,913
Received Thanks: 25,413
Quote:
Originally Posted by Delinquenz View Post
Weil das in Verbindung mit einer kleinen Wrapperklasse 1.) zu aufwendig ist und 2.) die Fehlerüberprüfung mit get_error() total reicht und den Code minimaler hält, als 15 verschiedene Exceptions fangen zu müssen. Mal schauen, vielleicht ändere ich das noch. Im Moment würde das Ganze einfach zu aufwendig werden für meine kleinen Projekte.
Was spricht gegen eine Exception, die einen Error-Code enthält?
Du hast Exception-Handling offenbar nicht ganz begriffen. Wenn man 15 verschiedene Exceptions an einer Stelle fangen muss, läuft da in der Regel etwas falsch.
MrSm!th is offline  
Old 03/09/2014, 19:14   #9

 
Delinquenz's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
Quote:
Was spricht gegen eine Exception, die einen Error-Code enthält?
Wie ich bereits in einem neueren Beitrag schrieb, werde ich wohl Exceptions noch reinbringen.

Quote:
Würde gern Feedback hören. Ich schaue die Tage noch, wie ich den = Operator und den Copy-Konstruktor mache, Constness anpassen und eventuell Exceptions reinbringen.
Delinquenz is offline  
Reply


Similar Threads Similar Threads
C++ Programm geht auf Vista nicht und Libcurl einbinden?
08/23/2012 - C/C++ - 2 Replies
Hallo. Ich würde gerne einen kleinen Updater als Win32 ANwedung programmieren mit der curl lib. Hat jemand Beispiele, welche funktionieren. Danke im Vorraus Cr41s3
Libcurl Schaltflächen
12/08/2009 - General Coding - 9 Replies
Hi, ich habe gerade angefangen mich mit libcurl zu beschäftigen und hab gleich eine grundlegende Frage und zwar wie kann ich mich auf einer Website bewegen? mit int main(void) { CURL *curl; CURLcode res;



All times are GMT +2. The time now is 18:03.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.