ホーム > プログラミング > Windows プログラミング > HTTP通信のリクエスト送信とレスポンス確認


HTTP通信のリクエスト送信とレスポンス確認

解説

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, "Windinet.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.HTTP要求送信
HttpSendRequest 関数を利用し、HTTP要求送信を行います。
リクエストヘッダー、リクエストパラメータを指定します。
6.HTTP要求に対応するステータスコードの取得
HttpQueryInfo 関数を利用し、HTTP要求に対応するステータスコードの取得を行います。
HttpQueryInfo 関数を利用すると、HTTP要求に関連する各種情報の取得が可能です。
ステータスコードの取得においては、InfoLevel引数として、HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER を指定します。
7.HTTPファイル読み込み
InternetReadFile 関数を利用し、HTTPファイル読み込みを行います。

サンプルコード

ダウンロード

サンプルプロジェクト

コメント


ご意見、ご感想、ご質問、ご要望等は、「コメントを投稿する」もしくは「ホーム > コンタクト」よりお願いいたします。
内容の誤り、誤字脱字、リンクミスなどの問題点を発見された場合には「コメントを投稿する」もしくは「ホーム > コンタクト」より連絡していただけると幸いです。


Copyright (c) 2004-2010 Nobuki HIRAMINE All rights reserved.