[C++] libcurl und REST

badday

Erfahrenes Mitglied
Moin zusammen,

ich schreibe gerade an einer Anwendung, die libcurl benutzt und damit REST-Befehle ausführt..
Ich benötige GET, POST, PUT und DELETE. Dabei habe ich folgende Fragen:

1) Funktioniert ein GET folgendermaßen?
C++:
CURL *curl;
	CURLcode res;
 
	curl = curl_easy_init();
	if(curl) 
	{
		
		curl_easy_setopt(curl, CURLOPT_URL, targetaddress.c_str());
		
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, &WS_ID);

		
		
		res = curl_easy_perform(curl);
 
		
		curl_easy_cleanup(curl);
	}
Wobei targetaddress die Zieladresse enthält und das Ergebnis in WS_ID gespeichert werden soll. Muss WS_ID vom Typ char * sein?

2) Poste ich mit CURLOPT_POSTFIELDS? (Ich muss jeweil JSON-Objekte senden)
Code:
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata.c_str());

3) Benutzt man für PUT auch CURLOPT_POSTFIELDS?

4) Wie führe ich DELETE aus?

5) ist es am besten, immer ein neues CURL, also oben CURL *curl; zu erstellen oder sollte ich (aus Geschwindigkeitsgründen, da doch relativ oft etwas gesendet/abgefragt/gelöscht wird) möglichst wenige solche Objekte erstellen.


Ich habe vorher schon etwas im Web geschaut, bin aber bei den oben genannten Fragen nicht weitergekommen. Wenn ihr weitere Infos braucht, einfach melden.



Vielen Dank.

Gruß,

badday
 
Hi.
ich schreibe gerade an einer Anwendung, die libcurl benutzt und damit REST-Befehle ausführt..
Ich benötige GET, POST, PUT und DELETE. Dabei habe ich folgende Fragen:

1) Funktioniert ein GET folgendermaßen?
Im Grunde ja.
Wobei targetaddress die Zieladresse enthält und das Ergebnis in WS_ID gespeichert werden soll. Muss WS_ID vom Typ char * sein?
Nein, der Parameter für CURLOPT_WRITEDATA muss (standardmäßig) ein FILE* sein. Siehe http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTWRITEDATA
2) Poste ich mit CURLOPT_POSTFIELDS? (Ich muss jeweil JSON-Objekte senden)
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPOSTFIELDS
3) Benutzt man für PUT auch CURLOPT_POSTFIELDS?
Warum liest du denn nicht einfach die Doku?
4) Wie führe ich DELETE aus?
dito.
5) ist es am besten, immer ein neues CURL, also oben CURL *curl; zu erstellen oder sollte ich (aus Geschwindigkeitsgründen, da doch relativ oft etwas gesendet/abgefragt/gelöscht wird) möglichst wenige solche Objekte erstellen.
Ich denke das initialisieren der CURL Objekte wird keinen großen Einfluß auf die Laufzeit haben.

Gruß
 
Ok, allerdings scheint er bei CURLOPT_WRITEDATA standardmäßig nach stdout zu schreiben. Sollte wohl kein Problem sein, dies in einen Stream umzuleiten, der dann in einen string schreibt.
CURLOPT_POSTFIELDS sollte demnach auch sein, was ich wollte.
Bei PUT benutzt man wohl:
Code:
/* enable uploading */ 
    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
 
    /* HTTP PUT please */ 
    curl_easy_setopt(curl, CURLOPT_PUT, 1L);
( http://curl.haxx.se/libcurl/c/httpput.html )
Bei DELETE schein es wohl auf
Code:
 curl_easy_setopt(handle, CURLOPT_CUSTOMREQUEST, "DELETE");
herauszulaufen.
OK, dann werde ich immer neue Instanzen erzeugen.

Vielen Dank für die Antwort. Falls ich irgendwo falsch liege, bitte ich das zu berichtigen.


Gruß,

badday
 
Ok, allerdings scheint er bei CURLOPT_WRITEDATA standardmäßig nach stdout zu schreiben.
Was heißt denn "scheint"?
The internal CURLOPT_WRITEFUNCTION will write the data to the FILE * given with this option, or to stdout if this option hasn't been set.
Sollte wohl kein Problem sein, dies in einen Stream umzuleiten, der dann in einen string schreibt.
Schreibe lieber eine eigene WRITEFUNCTION Callback Funktion.
Bei PUT benutzt man wohl:
Code:

/* enable uploading */
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);

/* HTTP PUT please */
curl_easy_setopt(curl, CURLOPT_PUT, 1L);
CURLOPT_PUT is deprecated and starting with version 7.12.1 you should instead use CURLOPT_UPLOAD.

Gruß
 
Vielen Dank, das hat mir sehr geholfen.
Wenn nochmal fragen auftauchen werden, die ich (auch nach mehr Internet.-Recherche als diesesmal) nicht beantworten kann, werde ich mich wieder melden ;)

Gruß,

badday
 

Neue Beiträge

Zurück