POSTを行うには?


tomo  2013-03-16 06:30:45  No: 44054

OnBeforeNavigate2についてお聞きします。

HTMLを動的追加を行うの続きなる形ですが、TWebBrowserでログイン画面を
表示し、ログインした際に、POST送信できていました。

OnBeforeNavigate2の処理を追加し、カスタムヘッダーを出力するように
修正をしております。

GETをした時には、問題ないのですが、ログイン画面にてID/PWを入力し
POST処理を行うとGETで遷移されてしまい、ログイン認証が取れません。

OnBeforeNavigate2内部で、POSTする内容がVariant Arrayになっている
こととかは、分かったのですが、GETをPOSTにする方法が分かりません。

皆さまのお知恵をお貸し頂けないでしょうか?

〜OnBeforeNavigate2に割り当てたコード(GET/POST関係なく全てGETでアクセスされる。)〜

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
var
  NewHeaders: OleVariant;
begin
  if (pDisp as IUnknown) = (WebBrowser1.ControlInterface as IUnknown) then
  begin
    if Pos('X-APP', Headers) <> 0 then Exit;

    Cancel := True;
    (pDisp as IWebBrowser2).Stop;

    NewHeaders := Headers + 'X-APP: APP'#13#10;

    (pDisp as IWebBrowser2).Navigate2(URL, Flags, TargetFrameName, PostData, NewHeaders);
  end;
end;

〜ログインフォーム〜
<form action="login.php" method="post">
ログインID<input type="text" name="login-id"><br />
パスワード<input type="password" name="password"><br />
<input type="submit" value="ログイン">
</form>


とも  2013-03-16 06:31:52  No: 44055

名前を「とも」ではなく「tomo」で投稿してしまいました。


Mr.XRAY  2013-03-21 14:22:03  No: 44056

前のスレッドで,セキュリティ関係についてのレスがありましたから,
それには触れません.それに,掲示板では,質問の内容についてのみレスする
というのが,暗黙の了解事項ですから.

本題ですが,文章の意図するところが理解できません.
少なくとも私には,例えば,

>POST処理を行うとGETで遷移されてしまい

意味不明です.

[遷移 - Wikipedia]
http://ja.wikipedia.org/wiki/%E9%81%B7%E7%A7%BB

[遷移とは : JavaA2Z]
http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000814.html

提示しているコードと,文章との関係も理解できません.
何日もレスがないのは,それなりに理由があると思いますよ.
それと,環境が書いていませんが.
「前のスレッドを探せば書いてあるから,探せ !!」
ということでしょうか ?

多分,見たとしても,読まないとは思いますが...
[第5章 質問はしてみたけれど・・・]
http://www.geocities.co.jp/siliconvalley/5656/#CHAPTER005


Mr.XRAY  2013-03-22 00:55:07  No: 44057

参考になるかどうか分かりませんが.

[GETメソッドとPOSTメソッド]
http://www.kanzaki.com/docs/html/htminfo32.html#get-post


take  2013-03-22 01:58:44  No: 44058

状況がわからない質問ですね・・・
HTTPサーバーとやりとりするHTTPクライアントをTWebBrowserで作っていて
これを自動ログインさせたい

ログインするときのBeforeNavigate2イベントを捕まえて
そのときのヘッダを書き換えてやれば
うまく通過するのではないかと思ったけど
うまくいきません
なのかな?

そうじゃなくてBeforeNavigate2イベント抜きで

TWebBrowserから

<form action="login.php" method="get">
で作ったフォームの送信ボタンはログインできて

<form action="login.php" method="post">
で作ったフォームの送信ボタンはログインできない

ってこと?

後者なら単なるHTTPの知識不足
前者なら必要性すら疑問


Mr.XRAY  2013-03-22 05:48:17  No: 44059

コードをみると,
PostData, Headers: OleVariant; の扱い方に関する内容にも受け取れますね.


Mr.XRAY  2013-03-23 16:52:36  No: 44060

ともさんへ.
もし,まだ問題解決を望むのであれぱ,別のスレッド,
つまり新たに質問し直すといいと思います.
その時,このスレッドへのリンクを書いておけば,参考になると思います.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加