Requette http sur une page web - C++ - Programmation
Marsh Posté le 26-04-2006 à 18:01:11
rien de bien portable.
par contre si ce que tu veut faire est relativement simple, tu peut ouvrir une socket, envoyer une fausse entête HTTP, et récupérer le résultat.
Marsh Posté le 26-04-2006 à 18:40:04
Portable ou non ca me va...
je suis sur un serveur web (linux), je dois juste exuter mon script c++ c'est tout.
(me demandez pas pourquoi c'est asseze compliqué... )
Reponse ou pas...c'est egale; tant que j'arrive à envoyer une requette http avec 2 variables posts ca suffit
PS:
si t'avais une bonne url explicant le fonctionnement et la mise en place de socket ca serait cool
Marsh Posté le 26-04-2006 à 19:23:42
Pourquoi ne pas utiliser libcurl et le binding C++ ?
http://curl.haxx.se/libcurl/
http://rrette.com/curlpp.html
Y'a une tripotée d'exemples.
Marsh Posté le 26-04-2006 à 19:41:43
J'ai pas d'url particulière à te conseiller.
Il doit y avoir ce qu'il faut pour ouvrir une socket sur le forum.
Sinon, j'ai ce morceau de code:
Code :
|
C'est pas compliqué, consulte <<man -a socket>> pour plus d'info.
Ensuite, tu peut utiliser le fichier retourné par la fonction pour écrire et lire dedans, utilise fclose() pour le fermer.
Sinon, pour envoyer une requête POST, tu n'a qu'à écrire:
POST /url HTTP/1.1
Connection: Close
Content-Type: application/x-www-form-urlencoded
... dans la socket, suivi de la longueur de tes variables, suivi de tes variables POST, au même format qu'une url GET, par exemple:
Content-Length: 15
arg1=10&arg2=20
... puis pour valider l'entête tu envoie deux '\n' à la suite.
enfin, comme tu n'a pas besoin de récupérer le résultat, tu ferme la connexion.
Marsh Posté le 27-04-2006 à 09:10:57
je vais regarder tout ca.... je repasserais par la site je galere comme un tit fou
Marsh Posté le 27-04-2006 à 15:12:31
Bon, j'ai pas mal avancé mais j'aiun nouveau tit probleme....
J'ai créé mon socket, je lui passe en paramettre une url est une variable (à poster), je créé ma connexion et lance ma requete http. Le probleme c'est que j'arrive pas au bon endroit.
Je voudrais poster ma variable sur une page , mais malheureusement il semble que ma requete arrive à la racine du serveur.
Deja voila le code:
Code :
|
et voila la reponse du serveur( exemple si j essai de me connecter à google):
[url] http://bakastef.free.fr/images/res.html[/url]
don si kelkun sait comment regler mon pb... ca serait super mega trop cool de la mort ^ ^
Marsh Posté le 27-04-2006 à 15:41:48
tu ferais mieux à mon avis de commencer à tester ton programme en envoyant des requêtes HTTP simples (genre "HEAD / HTTP/1.0" ) juste pour voir si la communicaion à travers les sockets passe bien.
commencer directement avec un POST me paraît un peu ambitieux
Marsh Posté le 27-04-2006 à 15:49:55
ha mais je suis ambitieux et ca marche ^^ .... j'ai tester sur d autre serveur que google et il me reponde bien que j'ai executer un post ds les regles...(protocole/HTTP1.0, methode POST ect)
J ai peut etre pas ete tres clair avant... le probleme se pose pas lors de la connexion ni de format de la requete, le prb c'est le :" gethostbyname"
ma requete est envoyé au serveur et c'est pas ca que je veux.... Ce que je veux c'est accedez à une page php et lui passer une variable en post. Hors, lorsque j'envoie ma requete sur un site hebergé par ovh, infomaniak ou free... je tombe sur le serveur web et pas sur le site
Marsh Posté le 27-04-2006 à 16:10:09
je suis pas spécialiste et je dis ça un peu au pif, mais c'est peut-être parce que les serveurs à qui tu t'adresses ont des configurations basées sur des hôtes virtuels. Du coup, le gethostbyname te renvoie la même IP pour tous les sites persos free. Quand tu contactes cette adresse IP sans préciser quel nom d'hôte tu vises, tu te retrouves sur le serveur de base.
Peut-être que si tu envoies des requêtes http contenant le nom d'hôte, ça marcherait mieux.
Code :
|
Marsh Posté le 27-04-2006 à 21:46:08
ben la encore je bloque... je pense que ce qui vient etre dis est tout a fait sensé, mais j'ai effectué quekques tests a la recherche des pages du site, et le serveur me retourne un code erreur 103 ou 404 ---> page non trouvée
Marsh Posté le 28-04-2006 à 08:38:39
attends, comment tu as fait le truc?
pour les serveur virtuels, tu ajoute dans l'entête:
Host: bidule.free.fr
PS: le format de la méthode POST commence par:
POST /path/fichier.ext?args HTTP/1.1
tout autre format renverra 404 ou pire 501
Marsh Posté le 28-04-2006 à 09:13:27
Je viens de relire ton code, et je remarque que tu n'a pas de fonction pour url-encoder les paramètres post. Il peut être utile d'en avoir une. Le plus simple est de transformer tous les caractères pour lesquels (isalnum(c)) est faux en leur équivalent hexa à 2 chiffres avec % devant: %20 pour ``espace``, pour le nom des variables POST et leur valeur.
Quelques remarques suplpémentaires:
HTTP 200 OK
HTTP 404 "Not Found"
Marsh Posté le 28-04-2006 à 15:59:27
Bon ya beaucoup de mieux, mais c'est tjs pas fini...
Aye je suis connecté a mon serveur, je post sur ma page de destination, mais je post peu
J'arrive pas a poster plus d'une variable... Quel est le format de la requete http..???
1- Concatener:
Code :
|
2-Multiplier :
Code :
|
3- A la suite:
Code :
|
je sais comment structurer ca , helppppp!!!!!!!!!
Marsh Posté le 28-04-2006 à 22:23:21
c'est comme une requête GET:
param1=un%20texte¶m2=10&parma3=un%20autre%20texte
content-length= taille de la ligne ci dessus en caractères
Marsh Posté le 26-04-2006 à 17:41:21
salut les gens....
Je voudrais savoir s'il existe une librairie ou une methode quelconque de faire une requete http sur un serveur web ...
J'ai vu tout un tas de solution en .net .... mais rien en c++.
Faut il passer par un socket, utiliser une classe particulière.... si vous avez des solutions... je prends...
Merci d avance.
---------------
triste époque ou il est plus difficile de casser un préjugé qu'un atome(A.Einstein)