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_GetHttpHeader(LPCTSTR lpszURL, LPTSTR& lpOutBuffer, HGLOBAL& hMem)
{
BOOL bRet = FALSE;
// WinInetライブラリ初期処理
if (! InitWinInet(lpszURL)) {
goto END;
}
// バッファバイト数取得
DWORD dwSize = 0;
if (! HttpQueryInfo(g_hURL, HTTP_QUERY_RAW_HEADERS_CRLF,
(LPVOID)NULL, &dwSize, NULL)) {
if (GetLastError()==ERROR_HTTP_HEADER_NOT_FOUND) {
goto END;
}
}
// メモリ再割り当て
hMem = GlobalReAlloc(hMem, (SIZE_T)dwSize+1, GMEM_MOVEABLE);
if (hMem == NULL) {
goto END;
}
lpOutBuffer = (TCHAR *)GlobalLock(hMem);
if (lpOutBuffer == NULL) {
goto END;
}
// HTTPヘッダ情報取得
if (! HttpQueryInfo(g_hURL, HTTP_QUERY_RAW_HEADERS_CRLF,
(LPVOID)lpOutBuffer, &dwSize, NULL)) {
goto END;
}
bRet = TRUE;
END:
// WinInetライブラリ終了処理
TerminateWinInet();
return bRet;
}
//===========================================================================//
// 呼び出し側
//===========================================================================//
{
HGLOBAL hMem = GlobalAlloc(GHND, sizeof(TCHAR));
CHAR* lpszSource = (CHAR*)GlobalLock(hMem);
if (NMAPI_GetHttpSource(strURL, lpszSource, hMem)) {
・・・
・・・
・・・
}
// メモリ開放
GlobalUnlock(hMem);
GlobalFree(hMem);
}
最終更新:2008年12月12日 12:56