SSブログ

MFCでHTTP通信 [プログラミング]

Visual C++でも、(MFCを使えば)HTTP通信をするプログラムを簡単に作ることが出来ます。
(ここ数回、出だしが一緒だ)

こんな感じ

const CString urlStr = _T("http://~~");
try {
    CInternetSession session;

    std::auto_ptr<CStdioFile> file(session.OpenURL(urlStr);
    if (file.get() == NULL)
        return;    // 失敗

    CString str;
    while (file->ReadString(str)) {
        // @@@ 取得したデータを、どうにかする @@@
    }

    file->Close();

} catch (CInternetException* e) {
    e->Delete();
}

ここで不思議なのが、わざわざ最後にClose()をしている事。

この手の後始末は、デストラクタで自動でやってくれるものと思っていたのですが、Close()をし忘れていると、警告が出ます。

Warning: destroying an open CInternetFile with handle ○○○○

警告だし、デストラクタでちゃんとClose()を呼び出してくれているので、無視しても問題ないのですが、気になるなら自分でClose()を呼びましょう。


レスポンスコードは次の様にして取得します。

    CHttpFile* httpFile = dynamic_cast<CHttpFile*>(file.get());
    if (httpFile != NULL)
        return;     // エラー
	
    DWORD code;
    if (!httpFile->QueryInfoStatusCode(code))
        return;     // 失敗

古いVisual C++だとデフォルトでRTTIが無効になっているので(新しい方はデフォルトで有効)、設定を変えるかしましょう。


HTTP通信するには、もう1つ方法があります。

const CString host = _T("~~~");  // ホスト
const CString path = _T("~~~");  // パス

try {
    CInternetSession session;

    std::auto_ptr<CHttpConnection> conn(session.GetHttpConnection(host));
    std::auto_ptr<CHttpFile< file(conn->OpenRequest(CHttpConnection::HTTP_VERB_GET, path));

    if (!file->SendRequest())
        return;    // 失敗
    
    CString str;
    while (file->ReadString(str)) {
        // @@@ 取得したデータを、どうにかする @@@
    }

    file->Close();
    conn->Close();

} catch (CInternetException* e) {
    e->Delete();
}

通信先のURLはホスト名とパスに分割して指定します。
http://example.jp/test.htmlの場合、ホストは“example.jp”、パスは“/test.html”になります。

終わりにClose()が必要なのは、最初の方法と一緒です。忘れると警告が出るのも一緒。


2つ目の方法は、多少面倒なのですが、POSTで通信が可能です。

OpenRequest()で、CHttpConnection::HTTP_VERB_POSTを指定して、SendRequest()で送信する本文を指定します。

[飛行機] 今日の一冊
京伝怪異帖

京伝怪異帖

  • 作者: 高橋 克彦
  • 出版社/メーカー: 中央公論新社
  • 発売日: 2000/06
  • メディア: 単行本

タグ:VisualC++
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

BASIC認証でHTTP通信MFCでHTTPS通信 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。