Requete HTML
Résolu
Franck7511
Messages postés
14296
Date d'inscription
Statut
Membre
Dernière intervention
-
Franck7511 Messages postés 14296 Date d'inscription Statut Membre Dernière intervention -
Franck7511 Messages postés 14296 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai crée un projet en C, et j'ai à un moment besoin d'accéder à une page PHP. (qui doit créditer un compte de x Euros, ce que je réussis à faire sans problème !)
Sur cette page, il y a un "1" si la requête a réussi, et "0" sinon. Pour le moment, j'utilise ShellExecute(), mais la page Internet reste ouverte. Est-il possible de la fermer juste après ? (ou mieux, de récupérer la valeur sur la page ?)
Question subsidiaire : comment faire pour afficher les caractères tels que "é", "à", etc sur la console Windows ?
J'ai essayé system("chcp 850") mais sans succès...
Merci !!
J'ai crée un projet en C, et j'ai à un moment besoin d'accéder à une page PHP. (qui doit créditer un compte de x Euros, ce que je réussis à faire sans problème !)
Sur cette page, il y a un "1" si la requête a réussi, et "0" sinon. Pour le moment, j'utilise ShellExecute(), mais la page Internet reste ouverte. Est-il possible de la fermer juste après ? (ou mieux, de récupérer la valeur sur la page ?)
Question subsidiaire : comment faire pour afficher les caractères tels que "é", "à", etc sur la console Windows ?
J'ai essayé system("chcp 850") mais sans succès...
Merci !!
A voir également:
- Requete HTML
- Editeur html - Télécharger - HTML
- Espace html ✓ - Forum HTML
- [**] Balise pour un espace vide en hml. Merci ✓ - Forum Webmastering
- Requête sql pix - Forum Python
- /Var/www/html/index.html ✓ - Forum Linux / Unix
2 réponses
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
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 ?
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
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 ?
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