Requete en c / socket
Fermé
ttatanepvp123
Messages postés
1
Date d'inscription
jeudi 8 février 2018
Statut
Membre
Dernière intervention
9 février 2018
-
9 févr. 2018 à 03:47
[Dal] Messages postés 6057 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 17 mars 2023 - 9 févr. 2018 à 18:16
[Dal] Messages postés 6057 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 17 mars 2023 - 9 févr. 2018 à 18:16
A voir également:
- Requete en c / socket
- Requete http - Guide
- Error 2002 (hy000): can't connect to local mysql server through socket '/var/run/mysqld/mysqld.sock' (2) ✓ - Forum Linux / Unix
- Requête bloquée par le firewall applicatif claranet webfence ✓ - Forum Internet / Réseaux sociaux
- Requete excel ✓ - Forum Excel
- Requete sql commence par ✓ - Forum Webmastering
1 réponse
[Dal]
Messages postés
6057
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mars 2023
1 043
Modifié le 9 févr. 2018 à 12:51
Modifié le 9 févr. 2018 à 12:51
Salut ttatanepvp123,
Avec les sockets, tu vas récupérer le contenu de la réponse http, avec l'entête http, un saut de ligne vide et le contenu de la page.
Pour récupérer ton "mot", il faudra passer l'entête et le saut de ligne vide, pour ne t'occuper que de ce qui suit.
Donc, avec un buffer assez grand pour récupérer le contenu de la page qui t'intéresse en un recv, tu peux sauter les headers en utilisant strstr() et en recherchant "\r\n\r\n".
Dal
Avec les sockets, tu vas récupérer le contenu de la réponse http, avec l'entête http, un saut de ligne vide et le contenu de la page.
Pour récupérer ton "mot", il faudra passer l'entête et le saut de ligne vide, pour ne t'occuper que de ce qui suit.
Donc, avec un buffer assez grand pour récupérer le contenu de la page qui t'intéresse en un recv, tu peux sauter les headers en utilisant strstr() et en recherchant "\r\n\r\n".
Dal
9 févr. 2018 à 18:16
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define MEM_BLOCK_SIZE 4096 int main(void) { int sockfd, portno, n; struct sockaddr_in serv_addr; struct hostent *server; char buffer[MEM_BLOCK_SIZE]; char *host = "essais.lionzone.fr"; char *p = NULL; portno = 80; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) perror("ERROR opening socket"); server = gethostbyname(host); if (server == NULL) { fprintf(stderr,"ERROR, no such host\n"); exit(0); } memset((char *) &serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; memcpy((char *)&serv_addr.sin_addr.s_addr, (char *)server->h_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sockfd,(struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) perror("ERROR connecting"); const char * request = "GET / HTTP/1.0\r\nHost: essais.lionzone.fr\r\nConnection: close\r\n\r\n"; n = write(sockfd,request,strlen(request)); if (n < 0) perror("ERROR writing to socket"); /* the data to be found plus the http header * shall be less than MEM_BLOCK_SIZE - 1 */ memset(buffer, 0, MEM_BLOCK_SIZE); n = recv(sockfd,buffer, MEM_BLOCK_SIZE - 1, 0); if (n < 0) { perror("ERROR reading from socket"); return 0; } if (n == 0) { perror("ERROR no data"); return 0; } printf("number of bytes received: %d\n", n); printf("full response received:\n%s\n",buffer); p = strstr(buffer, "\r\n\r\n"); if (p) { p = p + 4; /* move after the 4 chars */ printf("what is after the http header is:" " \n------\n%s\n------\n", p); } else { perror("ERROR empty line ending headers not found"); } close(sockfd); return 0; }Dal