熊「クマはPOSTなどしない」


好きなページにPOSTしてみる

先回はIWebBrowser2のNavigateを使用して、他のWEBページに遷移しました
今回は同じくNavigateを使ってPOSTとかやってみます

POSTをするには、2つの変更が必要になります
1つは、4つ目の引数(PostData)にPOSTするデータを入れます

もう1つは、POSTした感じのデータにする為に、
5つめの引数(Headers)にContent-typeを設定します

POSTをどこのページに飛ばそうかと考えたんですが、
クマ且つPOSTなページは見当たらなかったので、
Yahooのログインページにでも飛ばしてみることにしました

熊「妥協したな」


POSTデータの設定

4つ目の引数、PostDataは、SAFEARRAYを使わないといけないようです
(GoogleCodeSearchでソースいろいろ見た感じでは、みんなそうしてた)
SAFEARRAYを使うと、こんな感じになりました
//POST用データ
CComVariant vPost;
vPost.vt = VT_ARRAY | VT_UI1;
//とりあえずデータをcharで設定
char* szPostData = "login=user&passwd=XXXXXX";
//長さを取得
size_t len = strlen ( szPostData );
//POSTデータは、LPSAFEARRAYを使うものらしい
LPSAFEARRAY pSafeArray = SafeArrayCreateVector(VT_UI1, 0, (ULONG) len);
//POSTする内容を、SafeArrayにする
LPSTR pPostData;
SafeArrayAccessData(pSafeArray, (LPVOID*) &pPostData);
memcpy(pPostData, szPostData, len);
SafeArrayUnaccessData(pSafeArray);
//作成したLPSAFEARRAYをparrayに入れる
vPost.parray = pSafeArray;

赤字のところにユーザ名とパスワードを入れてください

熊「なんか面倒だな」


SAFEARRAYって使ったことないので、今ひとつよく分からず書いてます
その辺を勉強したら、もう少し良い方法があるのかも

あ、あと、ヘッダ見た感じでは、ちゃんとHTTPSで送られてるようですが、
試すときは、いちおーその辺、自己責任ということで


ヘッダ情報の設定

POSTする際は、ヘッダの情報に、Content-typeを追記しておく必要があります
ここはタイプがVT_BSTRなので、POSTデータの時みたく面倒な記述は必要なく、
下記のような一行で指定できます
CComVariant vHeader("Content-type: application/x-www-form-urlencoded\r\n");

ソース

今回の修正を組み込んだソースは、以下になります

ToolbarWindow.cpp


熊「自動ログインツールにできそうだな」


確かに
パスワードを暗号化しとかないと、セキュリティ的に良くないのと、
ログイン先がURLとかパラメータ名変えると、対応が必要とかあるけど


HOME    次へ


コメントスペース