forked from boostorg/beast
fix #124 The http::header data members "method", "url", and "reason" are changed from data members, to pairs of get and set functions which forward the call to the Fields type used to instantiate the template. Previously, these data members were implemented using std::string. With this change, the implementation of the Fields type used to instantiate the template is now in control of the representation of those values. This permits custom memory allocation strategies including uniform use of the Allocator type already provided to beast::http::basic_fields.
63 lines
1.7 KiB
C++
63 lines
1.7 KiB
C++
//
|
|
// Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
//
|
|
|
|
#include "urls_large_data.hpp"
|
|
|
|
#include <beast/core/streambuf.hpp>
|
|
#include <beast/http.hpp>
|
|
#include <boost/asio.hpp>
|
|
#include <boost/lexical_cast.hpp>
|
|
#include <iostream>
|
|
|
|
using namespace beast::http;
|
|
using namespace boost::asio;
|
|
|
|
template<class String>
|
|
void
|
|
err(beast::error_code const& ec, String const& what)
|
|
{
|
|
std::cerr << what << ": " << ec.message() << std::endl;
|
|
}
|
|
|
|
int main(int, char const*[])
|
|
{
|
|
io_service ios;
|
|
for(auto const& host : urls_large_data())
|
|
{
|
|
try
|
|
{
|
|
ip::tcp::resolver r(ios);
|
|
auto it = r.resolve(
|
|
ip::tcp::resolver::query{host, "http"});
|
|
ip::tcp::socket sock(ios);
|
|
connect(sock, it);
|
|
auto ep = sock.remote_endpoint();
|
|
request<string_body> req;
|
|
req.method("GET");
|
|
req.target("/");
|
|
req.version = 11;
|
|
req.fields.insert("Host", host + std::string(":") +
|
|
boost::lexical_cast<std::string>(ep.port()));
|
|
req.fields.insert("User-Agent", "beast/http");
|
|
prepare(req);
|
|
write(sock, req);
|
|
response<string_body> res;
|
|
streambuf sb;
|
|
beast::http::read(sock, sb, res);
|
|
std::cout << res;
|
|
}
|
|
catch(beast::system_error const& ec)
|
|
{
|
|
std::cerr << host << ": " << ec.what();
|
|
}
|
|
catch(...)
|
|
{
|
|
std::cerr << host << ": unknown exception" << std::endl;
|
|
}
|
|
}
|
|
}
|