|
|
|
|
Salut,
|
Super merci, mais
|
Salut killian,
|
Salut, encore,
#include <windows.h>
#include <stdlib.h>
#include <curl/curl.h>
#include <stdio.h>
int main(int argc, char **argv)
{
/*********************Quest ce que je dois enlever et modifier ?***********************/
char *buffer = NULL;
int offset = 0;
CURL *session = curl_easy_init(); /*Initialisation de la session */
curl_easy_setopt(session, size_t buffer_write, "sfgate.com"); /*On précise l'url qui nous interesse */
curl_easy_setopt(session, CURLOPT_WRITEDATA, fp); /*On balance notre pointeur de fichier comme destination */
curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, fwrite);/*On précise la fonction qui gèrera l'écriture dans notre fichier.
Peut être n'êtes vous pas habitués à celà, il faut mettre un pointeur de fonction en paramètre de curl_easy_setopt.
Comme ça curl_easy_setopt utilisera cette fonction pointée pour écrire dans le fichier.
La fonction en question doit respecter la même en-tête que la fonction standard fwrite:*/
curl_easy_perform(session);
fclose(fp);
curl_easy_cleanup(session); /*Enfin, on libère nos ressources utilisées */
return 0;
/*********************où est ce que ça se met ?***********************/
size_t buffer_write (const void *ptr, size_t size, size_t nmemb, FILE *stream)
{
int i;
buffer = (char *) realloc(buffer, size * nmemb);
for (i=0; i < size * nmemb; i++)
{
buffer[i + offset] = ptr[i];
offset++;
}
return size * nmemb;
}
|
Tiens, je pense que j'ai viré deux ou trois trucs qui servaient pas ( autant dire que j'ai arraché des trucs sans savoir ce que c'est sous le capot d'une voiture !! :)
curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, fwrite); que je comprend pas. quest ce que c'est CURLOPT_WRITEFUNCTION ? la description raconte que c'est pour résoudre un problème de language, mais elle dit aussi que c'est pour spécifier la façon dont le ficheir sera écrit. mais je ne veux pas de fichier, je veux juste que en tapant une url, ça mécrivent le contenu de la page source en dessous. est ce que cette fonction est utile ?
#include <windows.h>
#include <stdlib.h>
#include <curl/curl.h>
#include <stdio.h>
int main(int argc, char **argv)
{
char url;
scanf ("%c", &url)
printf ("1");
size_t buffer_write (const void *ptr, size_t size, size_t nmemb, FILE *stream)
{
int i;
buffer = (char *) realloc(buffer, size * nmemb);
for (i=0; i < size * nmemb; i++)
{
buffer[i + offset] = ptr[i];
offset++;
}
return size * nmemb;
}
/*********************Quest ce que je dois enlever et modifier ?***********************/
char *buffer = NULL;
int offset = 0;
printf("2");
CURL *session = curl_easy_init(); /*Initialisation de la session */
curl_easy_setopt(session, size_t buffer_write, &url); /*On précise l'url qui nous interesse,
mais j'essai de la mettre au travers de la variable &url, est ce la bonne méthode ?*/
curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, fwrite);
printf ("3");
fclose(fp);
curl_easy_cleanup(session); /*Enfin, on libère nos ressources utilisées */
printf ("4");
return 0;
}
|
Mouais, évite de déclarer des fonctions dans des fonctions:
#include <windows.h>
#include <stdlib.h>
#include <curl/curl.h>
#include <stdio.h>
char *buffer = NULL;
int offset = 0;
size_t buffer_write (const void *ptr, size_t size, size_t nmemb, FILE *stream)
{
int i;
buffer = (char *) realloc(buffer, size * nmemb);
for (i=0; i < size * nmemb; i++)
{
buffer[i + offset] = ptr[i];
offset++;
}
return size * nmemb;
}
int main(int argc, char **argv)
{
char url[1024];
scanf ("%s", url)
CURL *session = curl_easy_init(); /*Initialisation de la session */
curl_easy_setopt(session, CURLOPT_URL, url);
curl_easy_setopt(session, CURLOPT_WRITEDATA, NULL); //On fait semblant d'avoir un fichier
curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, buffer_write); //On passe notre fonction
curl_easy_perform(session);
curl_easy_cleanup(session); /*Enfin, on libère nos ressources utilisées */
return 0;
}
CURLOPT_WRITEFUNCTION est la fonction que curl doit utiliser pour enregistrer les données. Donc au lieu de fwrite, on met la nôtre. Le gâteau est un mensonge! |
La fenêtre d'execution s'ouvre, puis le curseur clignote ( une seule fois), et ça se ferme.
|
Ok j'ai pigé, alors je passe cette discussion en mode résolu et tu nous rejoins la nouvelle discussion ? ( parce que là la page commence à être longue).
buffer[i + offset] = ptr[i]; Il décrit : 'in function buffer_write' Et je ne peux rien entrer ( j'ai retiré scanf pamerce qu'au font pour l'instant il vaut mieux vérifier si d'une manière globale ça marche avant de pouvoir entrer manuellement un URL lors de l'execution, ça ça me parâit être de l'accessoire), mais comme je disais ce qu'il y a de surprenant c'est que si je parsème le programme de printf ("1, 2, 3") l'execution n'affiche rien, ce qui montre que c'est dès le départ qu'il y a un problème.
|
Remplace ma fonction par ça:
size_t buffer_write (const void *ptr, size_t size, size_t nmemb, FILE *stream)
{
int i;
char *myptr = (char *) ptr;
buffer = (char *) realloc(buffer, size * nmemb);
for (i=0; i < size * nmemb; i++)
{
buffer[i + offset] = myptr[i];
offset++;
}
return size * nmemb;
}
Le gâteau est un mensonge! |
Répondre à EL barto !
|
Voici les test que j'ai mis :
int main(int argc, char **argv)
{printf ("1");
CURL *session = curl_easy_init(); /*Initialisation de la session */
printf ("2");
curl_easy_setopt(session, CURLOPT_URL, "www.sfgate.com"); /*Ici on précise l'url */
printf ("3");
curl_easy_setopt(session, CURLOPT_WRITEDATA, NULL); //On fait semblant d'avoir un fichier
printf ("4");
curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, buffer_write); //On passe notre fonction
printf ("5");
curl_easy_perform(session);
printf ("6");
curl_easy_cleanup(session); /*Enfin, on libère nos ressources utilisées */
printf ("7");
getchar();
return 0;
}
C'a s'arrête au N°5, c'est donc curl_easy_perform qui ne fonctionne pas. Quest ce que ça peut vouloir dire ? |
Non, attends ! je crois queje sais
|
Répondre à EL barto ! |