Bonjour a tous dans le cadre d'un exercice je dois envoyer une requête uniquement avec des sockets. Je dois envoyer un Get a cette adresse http://httpbin.org/ip
Sur mon navigateur ca fonctionne, j'ai aussi désactivé le par feu mais j'ai une erreur sur le connect et WSAGetLastError retourne 0
#include <iostream>
#include <string>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
std::cerr << "Impossible d'initialiser Winsock." << std::endl;
return 1;
}
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (clientSocket == INVALID_SOCKET) {
std::cerr << "Erreur lors de la création du socket." << std::endl;
WSACleanup();
return 1;
}
struct sockaddr_in serverAddress;
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(80); // Port 80 pour HTTP
inet_pton(AF_INET, "httpbin.org", &serverAddress.sin_addr);
if (connect(clientSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR) {
std::cerr << "Erreur lors de la connexion au serveur." << std::endl;
closesocket(clientSocket);
std::cout << "last error : " << WSAGetLastError();
WSACleanup();
return 1;
}
std::string request = "GET /ip HTTP/1.1";
request += " Host: httpbin.org";
request += " Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7";
request += " Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7";
request += " Cache-Control: no-cache";
request += " Connection: keep-alive";
request += " Pragma: no-cache";
request += " Upgrade-Insecure-Requests: 1";
request += " User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36";
if (send(clientSocket, request.c_str(), request.length(), 0) == SOCKET_ERROR) {
std::cerr << "Erreur lors de l'envoi de la requête." << std::endl;
closesocket(clientSocket);
WSACleanup();
return 1;
}
char buffer[4096];
std::string response;
int bytesReceived;
do {
bytesReceived = recv(clientSocket, buffer, sizeof(buffer), 0);
if (bytesReceived > 0) {
response.append(buffer, bytesReceived);
}
} while (bytesReceived > 0);
std::cout << "Réponse du serveur : " << std::endl;
std::cout << response << std::endl;
closesocket(clientSocket);
WSACleanup();
return 0;
}
- Edité par JEANBAPTISTECOMTE1 24 juillet 2023 à 11:25:49
Ça intéresserait peut être les prochains lecteurs de voir la version corrigée qui fonctionne parfaitement ?
requete http sans librairie (socket pur)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
git is great because Linus did it, mercurial is better because he didn't.