[c++] connection HTTP à travers un proxy

salut a tous :hello:

Apres moultes recherches sur le web je n’ai rien trouvé à ce sujet et ca m’étonne un peu.

Je voudrai réaliser une connexion (ca je sais faire, udp ou tcp) mais le problème c’est que je suis connecté à un proxy (avec authentification username/password en plus).

Comment réaliser ca? ou connaissez vous des sites web qui traitent du sujet?

merci :jap:

http://www.iprelax.fr/http/http_prog1.php

merci c’est un bon début j’ai maintenant compris comment marche la requete à travers le proxy, par contre y’a pas si le proxy veut une authentification par mot de passe.

De mémoire ça se trouve dans la RFC ça ?

EDIT : Exacte, c’est bien dans la RFC, c’est juste une question de formattage de l’URI.

merci :jap:
Ca me met sur la bonne voie, je ne savais pas du tout où chercher.

:bounce: ca y est j’ai reussi a faire ma requete et a recuperer le code html.

Par contre si je veux faire une deuxieme requete, ca ne marche pas :
le send marche bien, mais lorsque je veut lire la socket, c’est vide. Ca ne viens pas de l’identification car lorsque ca ne marchai pas a cause de ca ca me retournai du code html comme quoi je n’etait pas identifie sur le proxy,
Par contre ca marche si je fais un close de la socket et que je la re-cree.
Vous auriez une idee? parce que je dois faire pas mal de requete et je me vois mal faire des closes et recreer des socket a chaque fois.

merci

Tu es sur d’être bien connecté ? Le serveur doit te répondre 200.
Sinon, tu fais bien une boucle infinie (ou un thread) juste apres l’authentification ?

en fait, je me connecte tout d’abord au proxy avec la commande “connect” :

Puis pour ma requete http j’inclue l’adresse que je veux récuperer (GET adresse HTTP/1.1) puis l’autentification avec Proxy-Authorisation.
J’envoie le tout avec un send, puis je lis avec un read.

La premiere fois ca marche, j’arrive a lire toute la page.
Mais la deuxieme fois, le send ne me retourne aucune erreur, mais le read me renvoie 0 carractères à lire.

Quand tu dis que le serveur doit me répondre 200, en fait c’est au proxy que je m’authentifie, il ne me répond rien, il fait que me renvoyer la page demandé.
Et après la connection je penses etre toujours connecté sinon le deuxième send devrai me renvoyer une erreur

Apes l’appel de connect, il faut former une uri du type : “CONNECT %s:%d HTTP/1.0”, Host,Port) et la, il doit te répondre 200.

Je ne fais pas d’uri de type CONNECT (et je viens d’essayer, en faisant ca sur le port de mon proxy 8080 il me dis que c’est refusé et qu’il faut faire une connection sur le port 443 pour faire du ssl, ce que je ne veut pas faire).
Pour info voici ce qu’il me dis :

Par contre dans mes requete http j’inclu ca :

et ca marche, car il reponds a ma requete par :

puis quelques lignes d’entete puis le code html de la page demandé.

Par contre si je fais une autre requete, la il ne me reponds rien (le read a 0 caracteres a lire).
La socket est pourtant toujours ouverte sinon le send aurait retourne une erreur je suppose.

Normalement, apres le “HTTP/1.1 200 OK”, tu n’as juste qu’a faire une boucle infini et lire la socket :neutre:

apres le 200, je lis la socket jusqu’a ce qu’il n’y ai plus rien a lire, donc jusqu’a la fin de la page html. Puis je refais un send sur cette socket pour recuperrer une deuxieme page , le send ne renvoie pas d’erreur mais lorsque j’essaye de lire, le read me renvoie 0 caracteres a lire :heink:

Tu fais ce qu’il faut apparamment … je vois pas ou ça peut bloquer si ce n’est niveau serveur :neutre:

J’essaye de voir d’ou peut venir le fait que je ne peut pas faire une deuxieme requete sans fermer et recreer la socket.

Alors je me suis dis que le proxy doit garder la connection ouverte, donc j’ai rajouté :

et si dans ma requete je met HTTP/1.1, il me reponds :

par contre si je met HTTP/1.0 il ne me met pas les deux ligne "Connection".

Donc je supposes que dans les deux cas il ferme la connection et c’est pour ca que je ne peux pas refaire une requete.

Pour info voici un exemple de requete que je fais :

Vous ne vairriez pas une erreur?
Ou une idée de pourquoi la connection est fermée?