如何在C ++中获取网页的源代码?

时间:2012-02-11 23:31:51

标签: c++ visual-studio-2010 visual-c++

我正在使用在控制台上运行的Microsoft Visual Studio 2010和C ++语言。

我正在尝试访问网页,然后获取该网页的来源(我的意思是来源:在Firefox中,右键单击,然后“查看页面源”)并将其保存在我的计算机中一个文本文件,以便我以后可以读取该保存的文件。能否请您举例说明如何使用c ++访问网站,然后将HTML源代码保存到我的计算机中?我非常感谢任何帮助

你怎么能安装libcurl?

当我使用#include <curl/curl.h>时,它说错误:无法打开源文件“curl / curl.h。”

4 个答案:

答案 0 :(得分:1)

您需要使用一些支持HTTP的工具,例如WinINet(Windows)或libcurl(多平台)。我正在使用WinINet与Web服务器进行通信,并且获取页面内容非常简单。以下是一些链接,为您提供了一些提示:

Get web page using WinInet class wrapper
Using WinInet as an alternative to libcurl

答案 1 :(得分:0)

低级方法:winsockets + HTTP协议。

更高级别的方法:库curl,WinINet API等。

答案 2 :(得分:0)

首先了解protocol layeringsoftware layering的基本原理!

之后,决定要开发的图层。然后为您的特定任务决定低级或高级API。

BTW:您的特定任务不是C ++的典型任务,您可以轻松使用curl实用程序,例如:curl YOURURL > file.html。无需重新发明轮子。

答案 3 :(得分:0)

这是一个小程序,我提取&amp;在文本文件中保存/编写Facebook帐户源代码。您可以根据需要进行更改(您可以使用“http://www.facebook.com”更改“http://www.google.com/”)。还要记住将wininet.a(库)链接到您的项目。希望它会有所帮助:)

#include <windows.h>
#include <wininet.h>
#include <iostream>
#include <conio.h>
#include <fstream.h>
fstream fs_obj;
using namespace std;

int main(int argc, char *argv[])
{

  fs_obj.open("temp.txt",ios::out | ios::app);  
  HINTERNET hInternet = InternetOpenA("InetURL/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 );

  HINTERNET hConnection = InternetConnectA( hInternet, "www.facebook.com", 80, " "," ", INTERNET_SERVICE_HTTP, 0, 0 ); //enter url here

  HINTERNET hData = HttpOpenRequestA( hConnection, "GET", "/", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0 );

  char buf[ 2048 ] ;

  HttpSendRequestA( hData, NULL, 0, NULL, 0 ) ;
  string total;
  DWORD bytesRead = 0 ;
  DWORD totalBytesRead = 0 ;

  while( InternetReadFile( hData, buf, 2000, &bytesRead ) && bytesRead != 0 )
  {
    buf[ bytesRead ] = 0 ; // insert the null terminator.
    total=total+buf;
    printf( "%d bytes read\n", bytesRead ) ;

    totalBytesRead += bytesRead ;
  }

  fs_obj<<total<<"\n--------------------end---------------------\n";
  fs_obj.close();
  printf( "\n\n END -- %d bytes read\n", bytesRead ) ;
  printf( "\n\n END -- %d TOTAL bytes read\n", totalBytesRead ) ;

  cout<<endl<<total<<endl; //it will save source code to (temp.txt) file
  InternetCloseHandle( hData ) ;
  InternetCloseHandle( hConnection ) ;
  InternetCloseHandle( hInternet ) ;
  system("pause");
}

使用temp.html重命名temp.txt,使用浏览器打开它,您将获得该网页。