.NETでブラウザのPOSTデータを取得する方法

.NET

クライアントから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);
            }
        }

    }
}