「クマは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とかパラメータ名変えると、対応が必要とかあるけど
コメントスペース