WinINetとWinHTTPを使用してC++からHttpアクセスの実装の仕方
WinINetでHTTPアクセスをする
- #include
- インターネットオープン
- HINTERNET hInternet = InternetOpen(L”MyApp”, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hInternet == NULL) {
// エラー処理
return;
} - InternetOpenUrlを利用する
- HINTERNET hConnect = InternetOpenUrl(hInternet, L”http://www.example.com”, NULL, 0, INTERNET_FLAG_RELOAD, 0);
if (hConnect == NULL) {
// エラー処理
InternetCloseHandle(hInternet);
return;
} - インターネットファイルを読み込む
- char buffer[4096];
DWORD bytesRead;
while (InternetReadFile(hConnect, buffer, sizeof(buffer), &bytesRead) && bytesRead > 0) {
// 読み取ったデータを処理する
// …
} - インターネットクローズハンドル
- InternetCloseHandle(hConnect);
hInternetを InternetCloseHandle する。
WinHTTPを使ったHTTPアクセス
- #include
- WinHttpOpenを開く
- HINTERNET hSession = WinHttpOpen(L”MyApp”, WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
if (hSession == NULL) {
// エラー処理
return;
} - WinHttpOpenRequest
- WinHttpSendRequest
- HINTERNET hConnect = WinHttpOpenRequest(hSession, L”GET”, L”/”, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
if (hConnect == NULL) { // エラー処理
WinHttpCloseHandle(hSession);
return;
}
if (!WinHttpSendRequest(hConnect, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0)) { // エラー処理
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return;
} - WinHttpReadData を呼び出す
- char buffer[4096] = {0};
DWORD bytesRead;
while (WinHttpReadData(hConnect,buffer, sizeof(buffer), &bytesRead) && bytesRead > 0) {
// 受け取ったデータの処理
// …
} - WinHttpCloseHandle
- WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);