Web サーバーサイドのファイルを取得する

Network Object Class を使った Dialog Box のプログラムから Web サーバーサイドのファイルを取得します。
Web サーバーサイドの画像ファイルも取得(ダウンロード)できます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクトを作成して、ページ先頭の画像を参考に DialogBox を作成して下さい。
    BOX キャプション ID
    DialogBox Dialog IDD_DIALOG1
    EditControl URL IDC_EDIT1
    EditControl 格納ファイル名 IDC_EDIT2
    EditControl 転送の状態 IDC_EDIT3
    Button 取得 IDOK
    Button Reset IDC_RESET
    Button 終了 IDCANCEL
  2. URL には yahoo のページが、格納ファイル名には test.txt が表示されます。
    取得ボタンをクリックすると yahoo のトップページが test.txt の名前で格納されます。
  3. URL に http://i.yimg.jp/images/main13.gif を、格納ファイル名に main13.gif をタイプして下さい。
    取得ボタンをクリックするとトップページの画像が main13.gif の名前で格納されます。
  4. 転送の状態には、正常に転送されると転送完了が、エラーのときはエラーメッセージが表示されます。
    Reset ボタンクリックすると転送の状態がクリアされます。

プログラムの説明

  1. このプログラムは、私が作成した Network Object Class を使用します。
    "Network.h" をインクルードして wininet.lib と Network.lib をリンクして下さい。
    wininet.h は Network.h の中でインクルードしています。
    App は Network Object Class の定義です。
    buf[] は転送用のバッファで、最大 60000 バイトのファイルを転送することができます。
    len は実際に転送されたバイト数を格納する領域です。
        #include    <windows.h>
        #include    "resource.h"
        #include    "Network.h"
        #pragma     once
        #pragma     comment(lib,"wininet.lib")
        #pragma     comment(lib,"Network.lib")
    
        Network *App= NULL;     //Network Object Class
        char    szURL[MAX_PATH]= "http://www.yahoo.co.jp/";
        char    fname[MAX_PATH]= "test.txt";
        char    buf[60000];
        DWORD   size= 60000;
        DWORD   len;
        
  2. WinMain() では DialogBox を表示するだけです。
  3. WM_INITDIALOG で Network Object Class を生成して、URL と格納ファイル名を表示します 。
        case WM_INITDIALOG:
            App= new Network(hDlg);
            SetWindowText(GetDlgItem(hDlg,IDC_EDIT1),szURL);
            SetWindowText(GetDlgItem(hDlg,IDC_EDIT2),fname);
            break;
        
  4. 取得ボタンをクリックすると、URLと格納ファイル名を設定して App->GetUrl() でファイルを取得します。
    エラーが発生すると、len に 0 が格納されます。
    正常に取得できると App->WriteData() でファイルに保存します。
            {   case IDOK:
                    GetDlgItemText(hDlg,IDC_EDIT1,szURL,MAX_PATH);
                    GetDlgItemText(hDlg,IDC_EDIT2,fname,MAX_PATH);
                    len= App->GetUrl(szURL,buf,size);
                    if (len==0)
                        SetWindowText(GetDlgItem(hDlg,IDC_EDIT3),"転送エラー");
                    else
                    {   SetWindowText(GetDlgItem(hDlg,IDC_EDIT3),"転送完了");
                        App->WriteData(fname,buf,len);
                    }
                    break;
        
  5. Reset ボタンをクリックすると、転送の状態をクリアします。
                case IDC_RESET:
                    SetWindowText(GetDlgItem(hDlg,IDC_EDIT3),"");
                    break;
        
  6. WM_CLOSE では Network Object Class を開放して下さい。
            case WM_CLOSE:
                SAFE_DELETE(App);
                EndDialog(hDlg, TRUE); 
                return TRUE;
                break;
        
  7. C# で同じようなプログラムを掲載しています。
    Web ページをダウンロード
    また Cpp/CLI でも同様のアプリケーションを掲載しています。
    Web ページをダウンロード

apache-tomcat(Java の Apache)を起動して確認します。

  1. 自宅マシンに構築した apache-tomcat からファイルを取得してみます。
    "C:\tomcat\bin\tomcat7w.exe" を管理者として実行して下さい。
  2. 次のコマンドでファイルが取得出来ました。
    192.168.24.53 は apache-tomcat を構築したパソコンのIPアドレスです。
    URL 取得ファイル
    http://localhost:8080/hoge/hello.htm hello.htm
    http://192.168.24.53:8080/hoge/jsp/HelloWorld.jsp HelloWorld.jsp

ソースプログラムです。 (^_^;)
ファイル名 説明
Dialog.cpp Main Dialog Program
Network.h Network Object Class Header
Network.cpp Network Object Class Program

超初心者のプログラム入門(Win32API C++)