0

当您将页面另存为 .xml 或查看页面源代码时,Internet 浏览器执行此操作的方式相同。当然,我的目标是一个 xml 格式的网页,开头是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

我为什么要这样做?好吧,我想将某些网页的整个源代码转储到一个字符串或 CString 中,我仍在研究如何去做

4

2 回答 2

2

既然您提到了 Visual C++,一个好的解决方案是利用 Microsoft Research 最近发布的 HTTP Casablanca 库,前提是您也能够使用 C++11。

http://msdn.microsoft.com/en-us/devlabs/casablanca.aspx

您需要使用 HTTP 客户端,类似于本教程中描述的内容, http: //msdn.microsoft.com/en-US/devlabs/hh977106.aspx

可能是这样的,

http_client client( L"http://somewebsite.com" );

client.request( methods::GET, L"page-to-download.html" )
    .then( []( http_response response ) {
        cout << "HTML SOURCE:" << endl << response.to_string() << endl; })
    .wait();
于 2012-07-31T09:04:16.213 回答
1

使用libcurl

size_t AppendDataToStringCurlCallback(void *ptr, size_t size, size_t nmemb, void *vstring)
{
    std::string * pstring = (std::string*)vstring;
    pstring->append((char*)ptr, size * nmemb);
    return size * nmemb;
}

std::string DownloadUrlAsString(const std::string & url)
{
    std::string body;

    CURL *curl_handle;
    curl_global_init(CURL_GLOBAL_ALL);
    curl_handle = curl_easy_init();
    curl_easy_setopt(curl_handle, CURLOPT_URL, url.c_str());
    curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, AppendDataToStringCurlCallback);
    curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &body);
    curl_easy_perform(curl_handle); 
    curl_easy_cleanup(curl_handle);

    return body;
}
于 2012-07-31T08:45:50.053 回答