Bonjour, j’essaye depuis quelques heures de crée un petit programme pour faire des requête http et afficher le contenu d’une page web, dans ce cas, google.ca (.ca = Canada). Le résultat espéré final serait de pouvoir télécharger des vidéos sur youtube.. Un peu loin du but
Pas si pire pour un débutant..
Donc,
le problème c’est que je n’arrive pas a afficher le code source de la page.. xd vous allez peut-être me dire que tu aurais pu utiliser boost::asio ou même cURL mais je trouve qu’on utilisant un système de socket() brut, on apprend mieux à connaitre ce qui se passe en dessous du moteur. Je pense que le problème viens de la requête que j’ai faite, surement mal écrite; Si quelqu’un pourrais me l’expliquer
Code d’erreur (merci debug): "Send() send a different number of bytes than expected 40" ligne 76-77 (Le programme se compile)
Merci
C0de :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #include <WS2tcpip.h> #include <iostream> #include <string> #include <Windows.h> #pragma comment(lib,"ws2_32.lib") using std::cout; using std::endl; void startUp(); int main() { //wsaDate .. startUp(); //S0cket SOCKET ListeningSocket = socket(AF_INET, SOCK_STREAM, 0); if (ListeningSocket == -1) { cout << "Error at: Socket Error.. " << endl; closesocket(ListeningSocket); WSACleanup(); return 1; } else { cout << "Listening Socket Created Succefully!" << endl; } //C0nnection const char* IpAddress = "66.33.196.149"; struct sockaddr_in hint; hint.sin_family = AF_INET; hint.sin_port = htons(80); //hint.sin_addr.s_addr = inet_addr(IpAddress); //Don't Use That _'TT_ inet_pton(AF_INET, IpAddress, &hint.sin_addr); bind(ListeningSocket, (sockaddr*)&hint, sizeof(hint)); int ConnectionHandleEst = connect(ListeningSocket, (struct sockaddr*)&hint, sizeof(hint)); if (ConnectionHandleEst != 0) { cout << "Error at : Can't connect to server Error " << endl; closesocket(ListeningSocket); WSACleanup(); return 1; } else { cout << "Connection established!" << endl; } //Request std::string request; request += "GET /HTTP/1.1\r\n"; request += "Host: iamawesome.com\r\n"; //request += "Connection: keep-alive"; request += "\r\n"; int Connection = send(ListeningSocket, request.c_str(), request.size() + 1, 0); if (Connection < 0) { cout << "Send() sent a different number of bytes than expected " << +request.length() << endl; closesocket(ListeningSocket); WSACleanup(); return 1; } //Get Resp0nse char buffer[4096]; int resp_length; std::string response; while (true) { resp_length = recv(ListeningSocket, buffer, 4096, 0); if (resp_length <= 0) { break; } response += std::string(buffer).substr(0, resp_length); } cout << response << endl; //Close s0cket closesocket(ListeningSocket); WSACleanup(); system("PAUSE"); return 0; } void startUp() { WSADATA wsaData; int wsaResult = MAKEWORD(2, 2); int iResult = WSAStartup(wsaResult, &wsaData); if (iResult != 0) { cout << "Error at: Initializing Winsock.., Winsock 2.2 may be not supported by your system or simply not installed" << endl; return; } else { cout << "[Winsock]Status : " << wsaData.szSystemStatus << endl; } } } |