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_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
ツールボックス

下から選んでください:

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