HTTPヘッダー取得処理

HINTERNET g_hInet;
HINTERNET g_hURL;
 
//===========================================================================//
/*!
	@brief WinInetライブラリ初期処理
	@param[in] lpszURL 対象URL
	@return 成否
*/
//===========================================================================//
BOOL
InitWinInet(LPCTSTR lpszURL)
{
	// WinInetライブラリ開始
	g_hInet = InternetOpen(
		L"", INTERNET_OPEN_TYPE_PRECONFIG,	
		NULL, NULL, 0);
	if (g_hInet == NULL) {
		return FALSE;
	}
 
	// セッションオープン
	g_hURL = InternetOpenUrl(g_hInet, lpszURL, NULL, 0, 0, 0);
	if (g_hURL == NULL) {
		return FALSE;
	}
 
	return TRUE;
}
 
//===========================================================================//
/*!
	@brief WinInetライブラリ終了処理
	@return 無し
*/
//===========================================================================//
void
TerminateWinInet()
{
	// WinInet関連ハンドル開放
	if (g_hURL) {
		InternetCloseHandle(g_hURL);
	}
 
	if (g_hInet) {
		InternetCloseHandle(g_hInet);
	}
}
 
//===========================================================================//
/*!
	@brief HTTPヘッダー情報取得
	@param[in] lpszURL 対象URL
	@param[out] lpOutBuffer HTTPヘッダー情報バッファ
	@param[in/out] hMem メモリハンドル
	@return 成否
*/
//===========================================================================//
BOOL WINAPI
NMAPI_GetHttpSource(LPCTSTR lpszURL, LPSTR& lpOutBuffer, HGLOBAL& hMem)
{
	BOOL bRet = FALSE;
 
	// WinInetライブラリ初期処理
	if (! InitWinInet(lpszURL)) {
		goto END;
	}
 
	// データ読み出し
	// サイトによっては、文字コードに左右される可能性がある為、マルチバイト扱いとする
	CHAR szBuf[128];
	::ZeroMemory(szBuf, sizeof(szBuf));
	DWORD dwRead;
	int nTotal = 0;
	while (TRUE) {
		InternetReadFile(g_hURL, szBuf, (DWORD)sizeof(szBuf) - 1, &dwRead);
		szBuf[dwRead] = '\0';
		if (dwRead == 0) {
			break;
		}
		nTotal += dwRead;
 
		// メモリ再割り当て
		hMem = GlobalReAlloc(hMem, (SIZE_T)nTotal+1, GMEM_MOVEABLE);
		if (hMem == NULL) {
			goto END;
		}
 
		lpOutBuffer = (CHAR *)GlobalLock(hMem);
		if (lpOutBuffer == NULL) {
			goto END;
		}
 
		strcat_s(lpOutBuffer, nTotal+1, szBuf);
	}
 
	bRet = TRUE;
 
END:
	// WinInetライブラリ終了処理
	TerminateWinInet();
 
	return bRet;
}
 
//===========================================================================//
//	呼び出し側
//===========================================================================//
{
	// メモリ割り当て
	HGLOBAL hMem = GlobalAlloc(GHND, sizeof(TCHAR));
	TCHAR* lpszHeader = (TCHAR*)GlobalLock(hMem);
 
	if (NMAPI_GetHttpHeader(strURL, lpszHeader, hMem)) {
		 ・・・
		 ・・・
		 ・・・
	}
 
	// メモリ開放
	GlobalUnlock(hMem);
	GlobalFree(hMem);
}
最終更新:2008年12月12日 12:59
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。