2008年02月15日

Navigate2を使ってPOSTで送信してみる

 IWebBrowser2Navigate2で、PostDataを使えばPOSTで送信できるのかなぁ、と思って適当にやってみたら、何故だかGETで送られてしまい、色々試してもダメ。
 そこでグーグル先生に聞いてみたところ、バイト列じゃないとダメーという記述が。
 面倒だったのですが、ちょいちょいと関数を一個追加したところ、POSTで送信できるようになりました。
 良かった良かった。

 で、この件、海外のサイトでは結構詳しく書いてあるのですが、日本語でそのままズバリ書いてあるサイトは見当たりませんでした。
 Cで組んでる場合のサンプルコードも見当たらなかったのですが、わりと悩んでいる方も多いような感じだったので、コードを置いておきます。

unsigned char IENavigate_PostData_Create(LPVARIANT vcPost, LPCTSTR vcData){

LPSAFEARRAY vtPsa;
LPSTR vtPost_Data;
unsigned int vtElems = lstrlen(vcData);

if(!vcPost)
return(0);

VariantInit(vcPost);

vtPsa = SafeArrayCreateVector(VT_UI1, 0, vtElems);
if(!vtPsa)
return(0);

SafeArrayAccessData(vtPsa, (LPVOID*)&vtPost_Data);
memcpy(vtPost_Data, vcData, vtElems);
SafeArrayUnaccessData(vtPsa);

V_VT(vcPost) = VT_ARRAY | VT_UI1;
V_ARRAY(vcPost) = vtPsa;

return(1);

}

void IENavigate_Post(char *vcpURL, char *vcpPost){

CComVariant vtUrl(vcpURL);
CComVariant vtHeader("Content-type: application/x-www-form-urlencoded\r\n");
CComVariant vtEmpty;
VARIANT vtPost = {0};

if(IENavigate_PostData_Create(&vtPost, vcpPost))
objIE->Navigate2(&vtUrl, &vtEmpty, &vtEmpty, &vtPost, &vtHeader);

}


同じカテゴリー(プログラム)の記事
 UTF-8のデコード (2008-10-07 19:39)