HTTP通信のリクエスト送信とレスポンス確認(WinInet API使用)
解説
HTTP通信を実装する方法としては、WindowsソケットAPI を利用する方法、WinInet API を利用する方法、MFC を利用する方法、などがあります。
ここでは、WinInet API を利用した、HTTP通信のリクエスト送信とレスポンス確認、の方法をまとめます。
WinInet API を利用する方法は、WindowsソケットAPI を利用する方法に比べて、SSL通信(https://~に対する通信)の処理を楽に実装できるという利点があります。
WinInet API を利用する方法は、MFC を利用する方法に比べて、MFC を利用できない、利用したくない場合でも実装できるという利点があります。
準備
- ・windows.h および Wininet.h のインクルード
- #include <windows.h>
#include <Wininet.h>
をファイルヘッダー部に追加します。
これにより、WinInet API が使えるようになります。 - ・Wininet.lib のリンク
- #pragma comment( lib, "Wininet.lib" )
をファイルヘッダー部に記述することにより、Wininet.lib をリンクするファイルへ追加します。
これにより、WinInet APIがリンクされるようになります。
(リンクするファイルの追加の方法には、#pragma comment( lib, libファイル名 ) をソースに記述する方法の他にも、プロジェクトのプロパティ「構成プロパティ > リンカ > 入力 > 追加の依存ファイル」に libファイル名 を追記する方法、などもあります。)
手続き
- 1.URLの解析
- InternetCrackUrl 関数を利用し、URLを解析し、HTTP通信かHTTPS通信か、通信先ホスト名、通信先URLパス、通信先ポート番号を求めます。
- 2.WinInetの初期化
- InternetOpen 関数を利用し、WinInetの初期化を行います。
インターネットアクセスの方法として、直接アクセスか、プロキシアクセスがあります。インターネットアクセスの方法として、レジストリの設定に従うように、アクセスタイプ引数は、INTERNET_OPEN_TYPE_PRECONFIG を指定します。 - 3.HTTP接続
- InternetConnect 関数を利用し、HTTP接続します。
通信先ホスト名、通信先ポート番号、を引数として指定します。
インターネットサービスタイプ引数は、HTTP通信なので、INTERNET_SERVICE_HTTP を指定します。 - 4.HTTP接続を開く
- HttpOpenRequest 関数を利用し、HTTP接続を開きます。
通信先URLパスを指定します。GETメソッドによる通信の場合には、通信先URLパスの末尾にリクエストパラメータを「&」で連結したものを指定します。
Verb引数は、GETメソッドの場合は、"GET"を、POSTメソッドの場合は、"POST"を指定します。
Flags引数は、HTTPSの場合には、HTTPの場合のフラグに加えて、セキュア通信のためのフラグを指定します。 - 5.リクエストの送信
- HttpSendRequest 関数を利用し、HTTPリクエストを送信します。
リクエストヘッダー、リクエストパラメータを指定します。 - 6.ステータスコードの取得
- HttpQueryInfo 関数を利用し、ステータスコードを取得します。
ステータスコードの取得においては、InfoLevel引数として、HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER を指定します。 - 7.レスポンスデータ読み込み
- InternetReadFile 関数を利用し、レスポンスデータを読み込みます。
サンプルコード
サンプルコードアプリケーション実行結果
ダウンロード
関連ページ
HTTP通信のリクエスト送信とレスポンス確認(WinHTTP API使用)(同期通信)
HTTP通信のリクエスト送信とレスポンス確認(WinHTTP API使用)(非同期通信)