get html without header with boost::asio
boost, boost-asio, c++
Solution
It's surprised that I also use this as my simple http client, So I just share my method, headers are put in a vector if you need it later, response data put in ostream object.
int do_get(std::string &host_,std::string &port_, std::string url_path,std::ostream &out_,std::vector<std::string> &headers, unsigned int timeout)
{
try{
using namespace boost::asio::ip;
tcp::iostream request_stream;
if (timeout>0){
request_stream.expires_from_now(boost::posix_time::milliseconds(timeout));
}
request_stream.connect(host_,port_);
if(!request_stream){
return -1;
}
request_stream << "GET " << url_path << " HTTP/1.0\r\n";
request_stream << "Host: " << host_ << "\r\n";
request_stream << "Accept: */*\r\n";
request_stream << "Cache-Control: no-cache\r\n";
request_stream << "Connection: close\r\n\r\n";
request_stream.flush();
std::string line1;
std::getline(request_stream,line1);
if (!request_stream)
{
return -2;
}
std::stringstream response_stream(line1);
std::string http_version;
response_stream >> http_version;
unsigned int status_code;
response_stream >> status_code;
std::string status_message;
std::getline(response_stream,status_message);
if (!response_stream||http_version.substr(0,5)!="HTTP/")
{
return -1;
}
if (status_code!=200)
{
return (int)status_code;
}
std::string header;
while (std::getline(request_stream, header) && header != "\r")
headers.push_back(header);
out_ << request_stream.rdbuf();
return status_code;
}catch(std::exception &e){
std::cout << e.what() << std::endl;
return -3;
}
}
Problem
i have a code to get source of html file but it get also "header response" or sth. like that (i don't know how to call it) how can i get it without this header? my code: ``` #include "StdAfx.h" #include <iostream> #include <boost/array.hpp> #include <boost/asio.hpp> using boost::asio::ip::tcp; std::size_t completion(const boost::system::error_code& error, std::size_t bytes_transfered) { return ! error; } int main(int argc, char* argv[]) { boost::asio::io_service io_service; boost::asio::ip::address addr = boost::asio::ip::address::from_string("31.170.161.16"); boost::asio::ip::tcp::endpoint endpoint(addr, 80); tcp::socket socket(io_service); socket.connect(endpoint); boost::asio::streambuf request; std::ostream requestStream(&request); requestStream << "GET /xD1azt4_panel/bhc.html HTTP/1.1\r\n" << "Connection: Keep-Alive\r\n" << "Host: dublersoft.hostoi.com\r\n\r\n"; boost::asio::write(socket, request); boost::asio::streambuf respond; boost::system::error_code ec; boost::asio::read(socket, respond, completion, ec); std::cout << &respond << std::endl; getchar(); return 0; } ``` and result: