En l'absence de curlpp
pour le fonctionnement en C++, j'ai décidé de commencer à utiliser libcurl
avec C à la place (pour l'instant). Étant complètement nouveau à la fois C et C++, cela devient un peu confus. Je ne suis même pas sûr de pouvoir séparer les fonctions C et C++, mais pour autant que je sache, il s'agit de C.Sortie libcurl vers la variable au lieu du fichier texte
Avec l'aide d'un ami, j'ai réussi à écrire la sortie (contenu de la page curl ramassé) à un fichier texte, mais je veux le mettre dans une variable de chaîne à la place, donc je peux utiliser la sortie dans d'autres parties du code. Je pourrais simplement rouvrir le fichier texte et lire son contenu, mais c'est stupide, je veux arrêter d'écrire dans un fichier et juste enregistrer dans une variable de chaîne immédiatement.
La fonction d'écriture
/* the function to invoke as the data received */
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
Le code entier
#include <iostream>
#include "curl/curl.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
/* the function to invoke as the data recieved */
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
int main(int argc, char *argv[]) {
CURL *curl;
FILE *fp;
CURLcode res;
curl = curl_easy_init();
char outfilename[FILENAME_MAX] = "C:\\Users\\admin\\Downloads\\bbb.txt";
if(curl) {
char *response = NULL;
fp = fopen(outfilename,"wb");
curl_easy_setopt(curl, CURLOPT_URL, "http://www.*hidden*.org/wp-test/lalala.txt");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(fp);
}
return 0;
}
j'espérais aussi quelqu'un pourrait expliquer comment cette fonction est utilisée, exactement. Je suis habitué (de php et vb.net) à une fonction comme ceci:
function1(ThisIsAvariable,ThisIsAvariableToo)
{
if ThisIsAvariable = something
{
Print "gogopowerrrangers" *append* ThisIsAvariableToo
}
};
qui serait alors utilisé comme:
function1(PassThisAsVariable1,PassThisAsVariable2);
Mais dans le code ci-dessus, la fonction
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
est simplement appelé comme celui-ci
write_data
Comme vous pouvez le voir ici:
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
Alors, pourquoi tout cela?
(void *ptr, size_t size, size_t nmemb, FILE *stream)
ne se recourbe « remplir » automatiquement ceux ou fonctionne C/C++ différemment avec les fonctions que la plupart des autres langues?
Merci d'expliquer, ne peut pas encore le faire fonctionner, cependant. ** utilisation invalide de type incomplet 'struct std :: basic_ostringstream, std :: allocateur >' ** qui se passe à la ligne * stream-> write (ptr, count); * dans votre Fonction write_data. –
natli
Vous avez besoin de '#include' pour obtenir la définition de 'std :: ostringstream'. –
sth
Merci, erreur débutant;) – natli