Windows2000 sp4 VC++6.0 MFC ダイアログベースで開発をしています。
Microsoft Web Browser のコンポーネントを使って、URLを表示しています。
URLにアクセスする際に、PostDataを送信したいのですが、Etherealで確認
しますとHtmlヘッダ情報の終了後にPostDataが入っていました。
どなたか方法をご存知の方がおられたらお教えください。
よろしくお願い致します。
以下にソースを載せます。
char cHead[100] = "Content-Type: application/x-www-form-urlencoded\n\r";
char cPost[128] = "year=2004&mon=07";
char cUrl[128] = "http://XXXXXXX";
VARIANT vUrl, vHed;
vUrl = _variant_t( cUrl );
vHed = _variant_t( cHead );
// Safearray作成
char* pBuf;
SAFEARRAY FAR* psa;
SAFEARRAYBOUND rgsabound[1];
// 作成するSAFEARRAYの要素数
rgsabound[0].cElements = strlen(cPost);
// 作成するSAFEARRAYの添字の下限値 = 0
rgsabound[0].lLbound = 0;
// SAFEARRAY作成
psa = SafeArrayCreate(VT_UI1,1,rgsabound);
// 作成したSAFEARRAYのポインタ取得及びロック
SafeArrayAccessData(psa,(void**)&pBuf);
//POSTDATAをSAFEARRAYにコピー
strcpy(pBuf,cPost);
// Variant作成
VARIANT pName;
VariantInit(&pName);
pName.vt = VT_ARRAY;
pName.parray = psa;
SafeArrayUnaccessData(psa); // SAFEARRAYアンロック
// POSTDATAのSafearray/Variant作成 <---
m_explorer.Navigate2 ( &vUrl, &_variant_t(), &_variant_t(), &pName, &vHed );
以下のように変更したら、PostDataを送ることができました。
#include <atlbase.h> // COM コンポーネント利用をインクルード
char cHeader[100] = "Content-Type: application/x-www-form-urlencoded\n\r";
char cPost[128] = "year=2004&mon=07";
char cUrl[128] = "http://172.26.82.60/owss/wmwa0022.asp";
CString URLStr = &cUrl[0];
CString headerStr = &cHeader[0];
CComVariant vempty;
CComVariant vUrl(URLStr);
CComVariant vHeader(headerStr);
// URLとHEADERのVariantを作成 <---
// POSTDATAのSafearray/Variant作成 --->
// Safearray作成
HRESULT hr;
int postDataLen = strlen ( cPost );
void* pArrayData = NULL;
SAFEARRAYBOUND rgsabound[1];
// 作成するSAFEARRAYの要素数
rgsabound[0].cElements = postDataLen;
// 作成するSAFEARRAYの添字の下限値 = 0
rgsabound[0].lLbound = 0;
// SAFEARRAY作成
if ( (m_psa=SafeArrayCreate(VT_UI1,1,rgsabound)) == NULL ) return FALSE;
// 作成したSAFEARRAYのポインタ取得及びロック
if ( (hr=SafeArrayAccessData(m_psa,&pArrayData)) != S_OK ) return FALSE;
// POSTDATAをSAFEARRAYにコピー
memcpy ( pArrayData, (void*)cPost, postDataLen );
// Variant作成
VARIANT pName;
VariantInit ( &pName );
pName.vt = VT_ARRAY;
pName.parray = m_psa;
// SAFEARRAYアンロック
if ( (hr=SafeArrayUnaccessData(m_psa)) != S_OK ) return FALSE;
// POSTDATAのSafearray/Variant作成 <---
CLSID cid;
IUnknown *pUnknown = NULL;
IWebBrowser2 *pBrowser = NULL;
// COM コンポーネント利用開始(のための初期化)
OleInitialize ( NULL );
// IE コンポーネントのクラス識別子(UUID)を探す
hr = CLSIDFromProgID ( L"InternetExplorer.Application", &cid );
// すべてのCOMが実装する最小限のIUnknown インタフェースを取得
hr = CoCreateInstance ( cid, NULL, CLSCTX_ALL, IID_IUnknown, (void **)&pUnknown );
// 更に実装しているインタフェース(IWebBrowser2)を探す
hr = pUnknown->QueryInterface ( IID_IWebBrowser2, (void **)&pBrowser );
// IE コンポーネントを表示させる
//pBrowser->put_Visible ( TRUE );
// URLへ移動
m_explorer.Navigate2 ( &vUrl, &vempty, &vempty, &pName, &vHeader );
// SAFEARRAYの削除
SafeArrayDestroy ( m_psa );
m_psa = NULL;
// オブジェクトの開放(参照カウンタを減らしてメモリを開放する)
pUnknown->Release ( );
pBrowser->Release ( );
// COM コンポーネントの利用終了
OleUninitialize ( );
return TRUE;
ツイート | ![]() |