4

有很多示例如何向服务器发出 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>

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

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

6 回答 6

10

从此,有了新人;C++ 网络库:此处指出的cpp -netlib 。

你想使用 asio。我想你喜欢这个库的可移植性和易用性,所以在这种情况下, cpp-netlib将是一个不错的选择。它基于与 boost 相同的原理,其作者旨在将其集成到 boost 中。

使用起来非常简单:

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;

我还没有尝试过这个,但似乎可以完全按照您的需要进行操作:

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

这个问题很久以前就被问到了,抱歉把它从坟墓里挖出来了。

于 2011-11-28T17:30:43.747 回答
3

来自编写 boost.asio 的人

http://think-async.com/Urdl/doc/html/urdl/getting_started/integrating_with_boost_asio.html

boost::urdl 是一个用于将 url 轻松读入字符串的库。

于 2010-04-14T18:13:34.920 回答
3

您需要自己实现这些功能。Boost.Asio 主要是一个套接字库,可用于实现各种协议。但是没有内置的便利功能仅适用于某些特定协议,例如 HTTP 或 SMTP。(嗯,实际上有内置的 DNS 解析,但仅此而已。)

但是,Boost.Asio 源代码附带了 HTTP 客户端/服务器的预制示例,因此您可以轻松地从它开始。

于 2009-11-19T15:03:39.373 回答
3

boost.asio 功能强大且复杂,但可能为此矫枉过正。

你看过libcurl吗?

于 2009-11-19T15:09:24.477 回答
2

boost.asio 不提供这样的功能。但我相信有很多图书馆可以做到。例如,参见POCO 库

于 2009-11-19T15:14:51.423 回答
0

同时,Boost.Beast出现了,它封装了 Boost.Asio,为HTTP GET提供了一个更简单的接口(不仅仅是)。

于 2019-08-03T12:31:19.580 回答