baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010
-
7 juil. 2006 à 21:49
baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010
-
9 juil. 2006 à 23:53
bonjous, voila, j'ai trouvé un code sur ce site qui permet de faire une requette html (port 80) sur un server, sauf que je voudrai savoir comment faire une requette sur une page de se serveur:
voici le code :
int main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;
char buffer[1024];
char canal[50] = "GET / HTTP/1.0\nAccept: */*\n\n"; /*<------a changer par exemple enhttp://annuaire.freebox.fr/annuaire/ mais cela ne fonctionne pas, aucune réponce, comment pourrai-je faire ?*/
ofstream log("protsock.log"); // fichier pour enregistrer les données reçues.
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = inet_addr(212.27.48.10); // site web (www.free.fr)
sin.sin_family = AF_INET;
sin.sin_port = htons(80); // port HTTP.
connect(sock, (SOCKADDR *)&sin, sizeof(sin)); // on se connecte sur le site web.
send(sock, canal, strlen(canal), 0); // on envoie la requête HTTP.
int i = recv(sock, buffer, sizeof(buffer), 0); // le buffer récupère les données reçues.
if (i != 0) // si le buffer reçoit des données.
{
log << buffer << "\n";
cout << buffer;
system("pause");
// enregistrement des données dans le fichier.
}
if (i ==0)
log << "aucune donné n'est parvenue\ndsl\a";
closesocket(sock); // on ferme le socket.
WSACleanup();
}
Je vous remerci d'avance et vous souhaite une bonne journée ;-)
katsankat
Messages postés571Date d'inscriptionvendredi 30 décembre 2005StatutMembreDernière intervention12 juillet 20123 8 juil. 2006 à 13:38
Salut baby :)
En HTTP, quand tu fais GET / tu demandes la page root, symbolisée par /.
Par conséquent pour obtenir truc.html situé dans un autre dossier ce serait
GET /machin/truc.html
Ceci étant dit,
Si tu veux obtenir une ressource d'un sous-domaine,
http://annuaire.freebox.fr/annuaire/ Notes qu'il n' y a pas de www dansl' URL! Comme il s' agit d'un sous-domaine (hôte virtuel) il FAUT spécifier le Host dans la requête HTTP, pour pouvoir ensuite demander un
GET /annuaire/
Infos détaillées sur la RFC 2616!
PS le code n'obtiendra que le premier paquet, faudra revoir ça aussi.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 8 juil. 2006 à 17:20
Salut,
Comme la requette est en HTTP/1.0, on peut mettre directement toute l'url dans le GET.
Sinon pour demander http://annuaire.freebox.fr/annuaire/ c'est l'adresse de annuaire.freebox.fr qu'il faut mettre dans le inet_addr et non pas celle de www.free.fr.
katsankat
Messages postés571Date d'inscriptionvendredi 30 décembre 2005StatutMembreDernière intervention12 juillet 20123 8 juil. 2006 à 20:08
RFC c'est "Request For Comments", l' établissement de standards pour
les protocoles de l' internet, avec l' ouverture que la traduction
évoque. Le W3C s'y accolle.
Google RFC 2616 ça te donnera la spécification du protocole HTTP 1.1. Et la RFC 1945 pour le proto HTTP 1.0.
Ces documents, en anglais, décrivent le protocle HTTP.
Pour la RFC 2616 (HTTP/1.1) vas directos à la section 5.1.2 elle parle du Host.
A mon avis tu n'as aucune reponse et comme ton buffer n'a rien recu et qu'il n'est pas initilaliser, il n'a pas le caractaire \0 de fin.
Du coup c'a t'affiche du nimporte quoi....( ceux qui est present dans l'espace memoire alloué a ton char)
J'ai un code qui marche ca me renvoi l'ip, je l'ai trouvé sur le site.
On fait une requette pour le fhichier ip.php et ce fichier nous retourne notre ip.
Aprés par la suite le code nous isolé l'ip dans un char.
katsankat
Messages postés571Date d'inscriptionvendredi 30 décembre 2005StatutMembreDernière intervention12 juillet 20123 8 juil. 2006 à 14:48
SVP ne pas tester ses applications réseau sur cppfrance c'est le
minimum syndical. Faire sur sa page perso par exemple. Ou
microsoft.com, ou google.fr.
int main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;
char buffer[1024];
char canal[50] = "Get / www.google.fr/imghp?hl=fr&tab=wi&q=";
ofstream log("protsock.log"); // fichier pour enregistrer les données reçues.
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = inet_addr("66.249.91.104"); // site web www.google.fr sin.sin_family = AF_INET;
sin.sin_port = htons(80); // port HTTP.
connect(sock, (SOCKADDR *)&sin, sizeof(sin)); // on se connecte sur le site web.
send(sock, canal, strlen(canal), 0); // on envoie la requête HTTP.
int i = recv(sock, buffer, sizeof(buffer), 0); // le buffer récupère les données reçues.
if (i != 0) // si le buffer reçoit des données.
{
log << buffer << "\n";
cout <<"sa marche";
cout << buffer;
system("pause");
// enregistrement des données dans le fichier.
}
if (i ==0)
log << "aucune donné n'est parvenue\ndsl\a";
cout <<"\npas de réponce\n";
if (i != 0) // si le buffer reçoit des données.
{
log << buffer << "\n";
cout <<"sa marche : ";
cout << buffer <<"\n";
system("pause");
// enregistrement des données dans le fichier.
}
closesocket(sock); // on ferme le socket.
WSACleanup();
}
baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010 9 juil. 2006 à 13:11
exacte, j'ai mis un netoyage avant le recv : memset(buffer,0,sizeof(buffer));, et a la sortie mon prog m'affiche que mon buffer est nul, donc je n'ai pas u de réponce (snif), j'y arriverai jamais
baby3378
Messages postés193Date d'inscriptionmercredi 7 septembre 2005StatutMembreDernière intervention 8 juillet 2010 9 juil. 2006 à 23:53
Un grand merci, j'avait trouvé la source qui marchait et j'ai réctifié l'erreur dans mon prog, mais je m'été di que je la mettrai (la solution) sur le site plus tard.
Merci quand même,
bonne prog a tous ;-)
PS: Pour toute remarque je ne pourrait vous répondre avant 3 jours