Requete HTML
Résolu/Fermé
Franck7511
Messages postés
14296
Date d'inscription
jeudi 24 décembre 2009
Statut
Membre
Dernière intervention
10 août 2017
-
20 avril 2014 à 13:17
Franck7511 Messages postés 14296 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 10 août 2017 - 28 avril 2014 à 09:47
Franck7511 Messages postés 14296 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 10 août 2017 - 28 avril 2014 à 09:47
A voir également:
- Requete HTML
- Editeur html - Télécharger - HTML
- &Nbsp html - Forum HTML
- Br html - Forum HTML
- Espace html ✓ - Forum HTML
- Faire sauter 2 lignes avec br (CSS) - Forum CSS
2 réponses
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
21 avril 2014 à 18:39
21 avril 2014 à 18:39
Salut Franck7511,
Je pense que tu veux dire "faire une requête http", au lieu de faire une requête "HTML" :-)
Avec libcurl, tu peux le faire sans lancer de navigateur et en récupérant la page.
https://curl.se/libcurl/
https://forums.commentcamarche.net/forum/affich-37594493-codeblocks-installer-une-bibliotheque-librairie
https://curl.se/libcurl/c/
https://curl.se/libcurl/c/libcurl-tutorial.html
https://curl.se/libcurl/c/example.html
Dal
Je pense que tu veux dire "faire une requête http", au lieu de faire une requête "HTML" :-)
Avec libcurl, tu peux le faire sans lancer de navigateur et en récupérant la page.
https://curl.se/libcurl/
https://forums.commentcamarche.net/forum/affich-37594493-codeblocks-installer-une-bibliotheque-librairie
https://curl.se/libcurl/c/
https://curl.se/libcurl/c/libcurl-tutorial.html
https://curl.se/libcurl/c/example.html
Dal
Franck7511
Messages postés
14296
Date d'inscription
jeudi 24 décembre 2009
Statut
Membre
Dernière intervention
10 août 2017
1 121
Modifié par Franck7511 le 24/04/2014 à 22:32
Modifié par Franck7511 le 24/04/2014 à 22:32
Salut,
J'utilise le framework Qt, mais j'ai du mal à modéliser ce que je veux.
Concrètement, j'ai une page en .php, je lui donne des variables dans le lien du style :
http://(...)/page.php?id=(...)&value=(...) et ça se met à jour dans une base de données.
J'ai fait ça :
Mais ça ne marche pas comme prévu... Une idée ? Merci !
En fait, je pense que c'est ça que je voudrais : https://curl.se/libcurl/c/simple.html
J'essaie de suite avec libcurl sur mon programme sans GUI pour voir ! :)
Edit :
j'ai fait ça sans succès :
En fait, je récupère bien le contenu de la page (qui doit être 0 en cas d'échec et 1 en cas de succès) grâce à ce code, mais j'ai que des 0, alors que quand je copie colle le contenu de str dans mon navigateur, j'ai que des "1" !!
Peut être str est correcte, mais la fonction ne prend pas en compte le point d'interrogation ou le égal ?
J'utilise le framework Qt, mais j'ai du mal à modéliser ce que je veux.
Concrètement, j'ai une page en .php, je lui donne des variables dans le lien du style :
http://(...)/page.php?id=(...)&value=(...) et ça se met à jour dans une base de données.
J'ai fait ça :
QNetworkAccessManager * netManager = new QNetworkAccessManager(); QUrl * remoteserver = new QUrl ("une certaine URL "); // le lien est correct, j'ai vérifié QNetworkRequest * request = new QNetworkRequest(*remoteserver); QNetworkReply * reply = netManager->get(*request);
Mais ça ne marche pas comme prévu... Une idée ? Merci !
En fait, je pense que c'est ça que je voudrais : https://curl.se/libcurl/c/simple.html
J'essaie de suite avec libcurl sur mon programme sans GUI pour voir ! :)
Edit :
j'ai fait ça sans succès :
CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, str); // str contient l'URL, correcte... curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl); }
En fait, je récupère bien le contenu de la page (qui doit être 0 en cas d'échec et 1 en cas de succès) grâce à ce code, mais j'ai que des 0, alors que quand je copie colle le contenu de str dans mon navigateur, j'ai que des "1" !!
Peut être str est correcte, mais la fonction ne prend pas en compte le point d'interrogation ou le égal ?
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 25/04/2014 à 11:42
Modifié par [Dal] le 25/04/2014 à 11:42
curl_easy_perform affecte à ta variable res un code d'erreur, qui renseigne juste sur le fait que requête html s'est bien déroulée, et ce n'est donc pas le contenu de la page (le code est effectivement 0, c'est à dire CURLE_OK, comme indiqué là https://curl.se/libcurl/c/curl_easy_perform.html si tout se passe bien).
Pour récupérer le contenu de la page retournée par la requête Http en mémoire, utilise cette méthode : https://curl.se/libcurl/c/getinmemory.html
Dal
Pour récupérer le contenu de la page retournée par la requête Http en mémoire, utilise cette méthode : https://curl.se/libcurl/c/getinmemory.html
Dal
Franck7511
Messages postés
14296
Date d'inscription
jeudi 24 décembre 2009
Statut
Membre
Dernière intervention
10 août 2017
1 121
Modifié par Franck7511 le 25/04/2014 à 12:32
Modifié par Franck7511 le 25/04/2014 à 12:32
Salut,
En fait, une des fonctions m'imprime le contenu de la page ! (je vois un commentaire mis par l'auteur, et un "0")...
Hier j'ai essayé une ligne de commande
curl -X get "http://(...)/page.php?id=(...)&value=(...)"
Et ça a marché, mais :
curl -X get 'http://(...)/page.php?id=(...)&value=(...)'
ça ne marchait pas ! Du coup, je me demandais si c'était une bonne technique de faire ça :
L'inconvénient, c'est que ça me semble un peu compliqué et que ça nécessite d'avoir curl à côté...
Après, je pense vraiment que le problème, c'est que curllib me prend que le premier argument de la page, et s'arrête au premier "&"... J'ai beau vérifier, le lien donné est correct, et copié-collé dans un navigateur, ou passé avec ShellExecute(), j'ai bien un "1"...
Merci de ton aide !!
Juste un petit détail : str contient des espaces et des "&", c'est un problème ?
En fait, une des fonctions m'imprime le contenu de la page ! (je vois un commentaire mis par l'auteur, et un "0")...
Hier j'ai essayé une ligne de commande
curl -X get "http://(...)/page.php?id=(...)&value=(...)"
Et ça a marché, mais :
curl -X get 'http://(...)/page.php?id=(...)&value=(...)'
ça ne marchait pas ! Du coup, je me demandais si c'était une bonne technique de faire ça :
char url [BUFSIZ] = (...); // contient l'URL char command [BUFSIZ]; // contient la commande FILE * fp = NULL; int return_value; if(!(freopen("temp.txt","w",stdout)) // on redirige la sortie vers un fichier texte { printf("Erreur lors de la creation d'un fichier temporaire.\n"); return -1; } snprintf(command, (size_t)BUFSIZ, "curl -X get \"%s\"", url); system(command); freopen(CON, "w", stdout); // on redirige stdout vers la console if(!(fp = fopen("temp.txt", "r"))) { printf("Erreur de lecture du fichier"); return -1; } // On traite la sortie et on récupère le 0 ou le 1... qu'on met dans return_value... fclose(fp); return return_value;
L'inconvénient, c'est que ça me semble un peu compliqué et que ça nécessite d'avoir curl à côté...
Après, je pense vraiment que le problème, c'est que curllib me prend que le premier argument de la page, et s'arrête au premier "&"... J'ai beau vérifier, le lien donné est correct, et copié-collé dans un navigateur, ou passé avec ShellExecute(), j'ai bien un "1"...
Merci de ton aide !!
Juste un petit détail : str contient des espaces et des "&", c'est un problème ?
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 25/04/2014 à 12:53
Modifié par [Dal] le 25/04/2014 à 12:53
Pour l'outil de ligne de commande curl, passer "-X get" est inutile, car la méthode par défaut est déjà GET.
Avec ton freopen, tu vas pouvoir rediriger la sortie de ton programme de stdout vers un fichier. Je ne suis pas sûr que cela affecte la sortie générée par un processus lancé par system. La bonne façon de faire, avec le curl en ligne de commande, puisque tu pars sur l'idée de créer un fichier temporaire avec un appel système au curl en ligne de commande, serait d'utiliser l'option
Cela dit, c'est lourd et compliqué. Pourquoi n'utilises tu pas un code similaire à l'exemple donné précédemment pour récupérer en mémoire ta page avec libcurl ?
https://curl.se/libcurl/c/getinmemory.html
Cela t'évite un lancement de processus, d'avoir à créer un fichier, l'ouvrir, fermer et d'avoir à gérer son éventuelle suppression aussi.
curlib ne s'arrête pas au premier "&".
Dal
Avec ton freopen, tu vas pouvoir rediriger la sortie de ton programme de stdout vers un fichier. Je ne suis pas sûr que cela affecte la sortie générée par un processus lancé par system. La bonne façon de faire, avec le curl en ligne de commande, puisque tu pars sur l'idée de créer un fichier temporaire avec un appel système au curl en ligne de commande, serait d'utiliser l'option
--output <file>prévue par la documentation, à cet effet.
Cela dit, c'est lourd et compliqué. Pourquoi n'utilises tu pas un code similaire à l'exemple donné précédemment pour récupérer en mémoire ta page avec libcurl ?
https://curl.se/libcurl/c/getinmemory.html
Cela t'évite un lancement de processus, d'avoir à créer un fichier, l'ouvrir, fermer et d'avoir à gérer son éventuelle suppression aussi.
curlib ne s'arrête pas au premier "&".
Dal
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
25 avril 2014 à 13:03
25 avril 2014 à 13:03
c'est lourd et compliqué
c'est aussi peu sûr.. imagine qu'un rigolo s'amuse à remplacer ton exécutable curl par un autre programme avec le même nom.
c'est aussi peu sûr.. imagine qu'un rigolo s'amuse à remplacer ton exécutable curl par un autre programme avec le même nom.
Franck7511
Messages postés
14296
Date d'inscription
jeudi 24 décembre 2009
Statut
Membre
Dernière intervention
10 août 2017
1 121
25 avril 2014 à 13:38
25 avril 2014 à 13:38
Faut-il traiter la chaine avant de la passer à libcurl ? (espaces, etc ?)
Si ce n'est pas le cas, j'essaie le snippet proposé et je te dis ce qu'il en est !
Si ce n'est pas le cas, j'essaie le snippet proposé et je te dis ce qu'il en est !