2009-11-19 53 views
4

有很多示例說明如何向服務器發送HTTP請求並通過boost.asio庫獲取答覆。但是,我無法找到一個簡單界面的好例子,並且想知道如果我需要自己實現它。在Boost.Asio中獲取HTML內容的簡單界面

例如,如果我需要的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響應。
+0

好吧,所以它看起來像沒有簡單的接口在提升。asio庫本身,但是,我從boost.asio庫的所有者那裏找到了urdl(http://think-async.com/Urdl/doc/html/index.html)庫,它允許做這樣的事情。 – user44986 2009-11-20 08:46:49

回答

3

你需要自己實現這些功能。 Boost.Asio主要是一個套接字庫,可以用來實現各種協議。但是,對於HTTP或SMTP等特定協議,沒有內置便利功能。 (嗯,實際上有內置的DNS解析,但就是這樣。)

但是,Boost.Asio源代碼附帶預先製作的HTTP客戶端/服務器示例,因此您可以輕鬆地從此開始。

3

boost.asio功能強大且複雜,但可能矯枉過正。您是否看過libcurl

2

boost.asio不提供此類功能。但我相信有一些圖書館可以做。例如,請參見POCO libraries

10

從那時起,就有了新人; C++ Network Library: cpp-netlib指出here

你想使用asio。我想你認爲這個庫的可移植性和易用性,所以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; 

我還沒有試過這一個,但它似乎可以做你需要的東西:

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

這個問題被問得很久以前,很抱歉把它從墳墓裏挖出來。

+0

我同意這可能是最好的選擇。 – 2013-07-29 17:21:55