用于在Boost.Asio中获取HTML内容的简单界面

use*_*986 4 c++ url boost-asio

有很多例子如何向服务器发出HTTP请求并通过boost.asio库获得回复.但是,如果我需要自己实现它,我找不到简单界面的好例子并且想知道.

例如,如果我需要获取http://www.foo.bar/path/to/default.html的内容,有没有办法在不验证URL的情况下获取内容,发出HTTP请求并解析服务器答案?

基本上,我正在寻找这样的东西:

std::string str = boost::asio::get_content("http://www.foo.bar/path/to/default.html");
std::cout << str;

#
<HTML>
  <BODY>
    Simple HTML page!
  </BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)

有几件事我想避免使用boost.asio.

  • 避免解析和验证URL.
  • 手动创建HTTP请求.
  • 从HTML页面内容中删除HTTP响应.

Coy*_*ote 10

从那以后,有一个新人; 在C++网络库:CPP-NETLIB如指出这里.

你想用asio.我想你觉得这个lib的可移植性和易用性,所以在这种情况下cpp-netlib将是一个很好的选择.它基于与提升相同的原则,其作者旨在将其整合到提升中.

使用起来非常简单:

http::client client;
/*<< Creates a request using a URI supplied on the command line. >>*/
http::client::request request("http://www.foo.bar/path/to/default.html");
/*<< Gets a response from the HTTP server. >>*/
http::client::response response = client.get(request);
/*<< Prints the response body to the console. >>*/
std::cout << body(response) << std::endl;
Run Code Online (Sandbox Code Playgroud)

我没试过这个,但似乎可以完全按照你的需要做:

cout << body(client().get(client::request("http://www.foo.bar/path/to/default.html")));
Run Code Online (Sandbox Code Playgroud)

很久以前就问过这个问题,很遗憾把它从坟墓中挖出来.