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:

Original source