BOOL HttpQueryInfo( IN HINTERNET hHttpRequest, IN DWORD InfoLevel, IN LPVOID Buf OPTIONAL, IN LPDWORD BufSize, IN OUT LPDWORD Index OPTIONAL);
引数の意味は以下の通り。
| hHttpRequest | 情報の取得元のHTTP要求を識別するハンドル。 |
| InfoLevel | 取得する属性や、要求の変更などのレベルを表すフラグ。後述の表を参照。 |
| Buf | 取得結果。 |
| BufSize | Bufのサイズ。関数の実行後実際のサイズまたは必要なサイズが返される。 |
| Index | 同一のヘッダが存在する場合にどのヘッダかを識別するためのインデックス。 |
InfoLevelには、まず以下のいずれかを指定する。
| HTTP_QUERY_MIME_VERSION | MIMEプロトコルのバージョン。 |
| HTTP_QUERY_CONTENT_TRANSFER_ENCODING | リソースに適用されるエンコーディング法。 |
| HTTP_QUERY_CONTENT_TYPE | リソースのタイプ。 |
| HTTP_QUERY_CONTENT_ID | コンテンツの識別子。 |
| HTTP_QUERY_CONTENT_DESCRIPTION | |
| HTTP_QUERY_CONTENT_LENGTH | リソースのサイズ。 |
| HTTP_QUERY_ALLOW | サーバがサポートしている動詞。 |
| HTTP_QUERY_PUBLIC | サーバに対して有効な動詞。 |
| HTTP_QUERY_DATE | メッセージの作成時刻。 |
| HTTP_QUERY_EXPIRES | リソースの有効期限。 |
| HTTP_QUERY_LAST_MODIFIED | 最終更新時刻。 |
| HTTP_QUERY_MESSAGE_ID | |
| HTTP_QUERY_URI | |
| HTTP_QUERY_DERIVED_FROM | |
| HTTP_QUERY_LANGUAGE | |
| HTTP_QUERY_COST | |
| HTTP_QUERY_WWW_LINK | |
| HTTP_QUERY_PRAGMA | 実装依存のデータ。 |
| HTTP_QUERY_VERSION | サーバに最後に返された応答コード。 |
| HTTP_QUERY_STATUS_CODE | サーバから返された状態コード。 |
| HTTP_QUERY_STATUS_TEXT | サーバから返された補足のテキスト。 |
| HTTP_QUERY_RAW_HEADERS | NUL文字で区切られた全てのヘッダ。 |
| HTTP_QUERY_RAW_HEADERS_CRLF | CR/LFで区切られた全てのヘッダ。 |
| HTTP_QUERY_REQUEST_METHOD | リクエストで使用された動詞。 |
次に、以下のフラグの組み合わせを論理和で指定する。
| HTTP_QUERY_INFO_NUMBER | データのタイプを表すDWORD値を取得する。 |
| HTTP_QUERY_CUSTOM | ASCII文字列のヘッダ名を取得する。 |
| HTTP_QUERY_FLAG_COALESCE | 同名のヘッダを結合して取得する。 |
| HTTP_QUERY_FLAG_REQUEST_HEADERS | 一般には応答ヘッダの取得に使用する。また、要求ヘッダの取得にも使用可能。 |
| HTTP_QUERY_FLAG_SYSTEMTIME | 最終更新日時などをSYSTEMTIMEで返す。 |
| HTTP_QUERY_FLAG_NUMBER | 状態コードなどの32bit値を返す。 |
戻り値は、関数の実行に成功したか否かを表す真偽値である
void RequestHttp()
{
HINTERNET hInternet;
HINTERNET hHttpSession;
HINTERNET hHttpRequest;
char *Buf;
char BufSizeText[1000];
DWORD BufSizeTextSize = 1000;
DWORD BufSize;
DWORD ReadSize;
/* WININET初期化 */
hInternet = InternetOpen(
"WININET Sample Program",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0);
/* サーバへ接続 */
hHttpSession = InternetConnect(
hInternet,
"www.cool.ne.jp",
INTERNET_DEFAULT_HTTP_PORT,
NULL,
NULL,
INTERNET_SERVICE_HTTP,
0,
0);
/* HTTP要求の作成 */
hHttpRequest = HttpOpenRequest(
hHttpSession,
"GET",
"index.html",
NULL,
"http://www.cool.ne.jp/masapico/",
NULL,
0,
0);
/* 作成したHTTP要求の発行 */
HttpSendRequest(
hHttpRequest,
NULL,
0,
NULL,
0);
/* 返されたコンテンツの長さを取得 */
HttpQueryInfo(
hHttpRequest,
HTTP_QUERY_CONTENT_LENGTH,
BufSizeText,
&BufSizeTextSize,
NULL);
BufSize = atol(BufSizeText);
Buf = GlobalAlloc(GMEM_FIXED, BufSize);
/* コンテンツの内容を取得・表示 */
InternetReadFile(
hHttpRequest,
Buf,
BufSize,
&ReadSize);
printf("%s\n", Buf);
/* 後処理 */
GlobalFree(Buf);
InternetCloseHandle(hHttpRequest);
InternetCloseHandle(hHttpSession);
InternetCloseHandle(hInternet);
}