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()
で送信する本文を指定します。
今日の一冊 | |
|
タグ:VisualC++
2009-09-13 08:39
nice!(0)
コメント(0)
トラックバック(0)
コメント 0