クライアントからWebサーバーに指示を送る時、2通りの方法があると思います。URLのパラメーターとして送る方法と、POSTリクエストを送信する方法。後者はURLに出てきません。
で、.NETのWebBrowserコントロールは、POSTの内容を取得する方法が用意されていないようです。
でも調べてみると、.COMコンポーネントで実装したコントロール(AxWebBrowser)でなら可能のようです(ieframe.dllにある)。
で、以下は方法。
コントロールを追加
ツールボックスの全般を右クリックして、アイテムの選択をクリック。
COMコンポーネントのMicrosoft Web Browserにチェックを入れて「OK」を押す
コントロールが追加されます。
後は配置するだけ。クラス名は、AxWebBrowser。
名前空間はAxSHDocVwの中。
参照にも「AxSHDocVw」が追加されていますね。
コード
BeforeNavigate2イベントの中で取得します。
見れば分かるかもしれませんが、スクリプトエラーを除去する箇所は、うっとうしいので追加しただけです。
文字列に日本語を含む場合はデコード処理を追加します。
using System;
using System.Text;
using System.Windows.Forms;
namespace BrowserTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.axWebBrowser1.Navigate("https://www.google.co.jp");
this.axWebBrowser1.Silent = true; //スクリプトエラーを非表示にする
}
private void axWebBrowser1_BeforeNavigate2(object sender, AxSHDocVw.DWebBrowserEvents2_BeforeNavigate2Event e)
{
string postData = string.Empty;
if(e.postData != null)
{
postData = Encoding.UTF8.GetString(e.postData as byte[]);
postData = Uri.UnescapeDataString(postData); //デコードする場合はこれを追加
MessageBox.Show(postData);
}
}
}
}