2012-02-11 20 views
1

私はコンソール上で動作するMicrosoft Visual Studio 2010およびC++言語を使用しています。C++でWebページのソースコードを取得する方法は?

私はウェブページにアクセスしようとしていますが、そのウェブページのソースを取得しようとしています(ソースではFirefoxを右クリックしてから「ページソースを表示」してください)テキストファイルとして保存して、後で保存したファイルを読むことができます。 C++でWebサイトにアクセスし、HTMLソースコードを自分のコンピュータに保存する方法の例を教えてください。

libcurlをインストールするにはどうすればいいですか?

私は#include <curl/curl.h>を使用する場合、それはエラー言う:「カール/ curl.h」オープン・ソース・ファイルはできません

+2

'libcurl'を試してください。 –

+2

@LightnessRacesinOrbitいいえ、それはこの質問をクロールすると落ち込んでくるでしょう:) – sehe

+0

@sehe:True that –

答えて

1

HTTPをサポートするいくつかのツールを使用する必要があります。 WinINet(Windows)またはlibcurl(マルチプラットフォーム)。私はWebサーバーとの通信にWinINetを使用していて、ページの内容を取得するのはかなり簡単でした。ここではあなたに何をすべきかのヒントを与えるためにいくつかのリンクです:

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

0

低レベルのアプローチ:winsockets + HTTPプロトコル。

上位レベルのアプローチ:ライブラリカール、WinINet APIなど。

0

protocol layeringsoftware layering最初についての基礎を知っていることを学びます!

その後、開発するレイヤーを決定します。次に、あなたの特定のタスクの低レベルAPIまたは高レベルAPIを決定します。

BTW:特定のタスクはC++の典型的なタスクではありません。curlユーティリティ(例:curl YOURURL > file.html)を簡単に使用できます。ホイールを再発明する必要はありません。

0

これは小さなプログラムで、私は&をテキストファイルに保存/書き出します。必要に応じて変更することができます( ""を "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"); 
} 

は、あなたがそのWebページを取得するブラウザーで開き、temp.htmlでTEMP.TXT名前を変更するのに役立ちます願っています。

関連する問題