Attualmente il mio programma C++ invoca il ricciolo attraverso una pipe (popen("curl ...")
) per POST un file di dati JSON su un server web. Questo ha evidenti limiti di prestazioni dovuti alla necessità di salvare il JSON in un file e di richiamare l'arricciatura in una subshell. Mi piacerebbe riscriverlo per usare libcurl, ma non mi è chiaro come farlo. La linea di comando passaggio popen()
è:Come si esegue il POST di un buffer di JSON utilizzando libcurl?
curl -s -S -D /dev/null -H "Content-Type: application/json" -X POST -d file-of-json http://server/handler.php
I dati JSON (circa 3K) è seduto in un buffer in RAM prima devo postarla. Mi aspettavo di usare CURLOPT_READFUNCTION di libcurl per lo spooling del buffer su libcurl (ma sono aperto alle alternative) e CURLOPT_WRITEFUNCTION per catturare la risposta del server, in modo simile a come ho letto la risposta dalla pipe di popen.
Tutto ciò sembra semplice. Qual è la confusione tra la combinazione di CURLOPT_POST, CURLOPT_HTTPPOST, CURLOPT_POSTFIELDS, CURLOPT_HTTPHEADER di cui ho bisogno. Ho letto molti post su questo argomento (nessun gioco di parole) e nessuno corrisponde esattamente al mio scenario. Eventuali suggerimenti?
[Si noti che io normalmente non ho alcun campi del modulo con codifica URL, come questo: http: //server/handler.php I = non & non = Usa & questi = in & mia interrogazione =?]
Questo è perfetto. Grazie. –
Nessun problema. A proposito, se stai scrivendo C++ dovresti dare un'occhiata a curlpp, che è un wrapper per la dritta C libcurl, ed è un modo molto più carino di andare sulle cose: http://curlpp.org/index.php/examples/71- esempio-21 –