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
| boost::asio::io_service ioService;
/* Création d'une socket et connexion au serveur */
tcp::socket * socket = connexionSocket(serveur, ioService);
boost::asio::streambuf request;
ostream requestStream(&request);
/* Ecriture dans le requestStream des requêtes HTTP */
requestStream << "GET " << adressePage << " HTTP/1.0\r\n";
requestStream << "Host: " << serveur << "\r\n";
requestStream << "Accept: */*\r\n";
requestStream << "Connection: close\r\n\r\n";
/* Envoi des requêtes */
boost::asio::write(*socket, request);
/* Lecture du numéro de version HTTP et du code HTTP renvoyé */
boost::asio::streambuf response;
boost::asio::read_until(*socket, response, "\r\n");
istream responseStream(&response);
string httpVersion;
responseStream >> httpVersion;
unsigned int statusCode;
responseStream >> statusCode;
string statusMessage;
getline(responseStream, statusMessage);
if (!responseStream || httpVersion.substr(0, 5) != "HTTP/")
throw SocketRepInvalide("Réponse du serveur invalide");
if (statusCode != 200)
throw SocketRepInvalide("Code de réponse du serveur incorrect");
/* Lecture du header */
boost::asio::read_until(*socket, response, "\r\n\r\n");
std::string header;
while (std::getline(responseStream, header) && header != "\r");
/* Lecture du contenu de la page */
boost::system::error_code error;
string contenuPage;
tcp::iostream s("www.isima.fr", "80");
while (boost::asio::read(*socket, response, boost::asio::transfer_at_least(1), error))
{
std::string line;
std::getline(s, line);
contenuPage += line;
}
if (error != boost::asio::error::eof)
throw boost::system::system_error(error); |
Partager