将HTML源读取到字符串

时间:2010-12-06 20:59:15

标签: c++ http get

我希望你不要对我太过皱眉,但这应该是一个相当容易的人负责。我想将网站上的文件读成字符串,这样我就可以从中提取信息。

我只想要一种简单的方法将HTML源代码读入字符串。环顾四个小时后,我看到了所有这些库和卷曲的东西。我只需要原始的HTML数据。我甚至不需要一个明确的答案。只是有助于我改进搜索的东西。

为了清楚,我希望我可以操作的字符串中的原始代码,不需要任何解析等。

4 个答案:

答案 0 :(得分:8)

您需要一个HTTP客户端库,其中一个是libcurl。然后,您将向URL发出GET请求,并阅读回复所选库提供的响应。

这是一个example让你入门,它是C所以我相信你可以解决它。

#include <stdio.h>
#include <curl/curl.h>

int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
    res = curl_easy_perform(curl);

    /* always cleanup */ 
    curl_easy_cleanup(curl);
  }
  return 0;
}

但你标记了这个C ++,所以如果你想要一个libcurl的C ++包装器,那么使用curlpp

#include <curlpp/curlpp.hpp>
#include <curlpp/Easy.hpp>
#include <curlpp/Options.hpp>

using namespace curlpp::options;

int main(int, char **)
{
  try
  {
    // That's all that is needed to do cleanup of used resources
    curlpp::Cleanup myCleanup;

    // Our request to be sent.
    curlpp::Easy myRequest;

    // Set the URL.
    myRequest.setOpt<Url>("http://example.com");

    // Send request and get a result.
    // By default the result goes to standard output.
    myRequest.perform();
  }

  catch(curlpp::RuntimeError & e)
  {
    std::cout << e.what() << std::endl;
  }

  catch(curlpp::LogicError & e)
  {
    std::cout << e.what() << std::endl;
  }

  return 0;
}

答案 1 :(得分:3)

HTTP建立在TCP之上。如果您了解套接字编程,则可以编写一个简单的网络应用程序,打开所需服务器的套接字并发出HTTP GET命令。无论服务器响应什么,您都必须删除所需的实际文档之前的HTTP标头。

如果这听起来很复杂,那就坚持使用libcurl。

答案 2 :(得分:1)

如果是黑客攻击 - 那么只需从show source获取源代码,然后保存为txt。那么你可以使用普通文件io流打开它。

  • 所有这些讨厌的图书馆都暗示这是正确的,非常重要的练习......:)

答案 3 :(得分:0)

如果您只想抓取整个HTML代码而没有任何解析和外部库,我的兴趣就是将带有IO流的代码复制到字符串中。

这是我想到的最简单的方法,但请注意,这不是最有效的方法。