1

geckoWebBrowserを使用してc#フォームからphpにデータを投稿する方法を考えていましたか?フォーム上のIEブラウザでそれを行いました

    public Form1()
    {
        InitializeComponent();
        String postdata = "data=somedata";

        System.Text.Encoding a = System.Text.Encoding.UTF8;

        byte[] byte1 = a.GetBytes(postdata);

        webBrowser1.Navigate("somepage.php", "", byte1, "Content-Type: application/x-www-form-urlencoded");
    }

しかし、geckoWebBrowser1.Navigateでそれを行う方法は?

4

1 に答える 1

0

このメソッドGeckoWebBrowser.Navigate()は、そのパラメーターをnsIWebNavigationインスタンスに渡します。インスタンスXPCOMは、ブラウザーインスタンスを実行するためのインターフェイスであり、この場合XULRunner 1.8は(かなり古い)を使用します。

残念ながら、のNavigate()メソッドは;GeckoWebBrowserの過負荷を提供しません。postDataそれは単にIntptr.Zeroその引数を渡します。

テストすることはできませんが、で次のような新しいメソッドを作成するGeckoWebBrowser.csと、投稿データを含む文字列を使用して呼び出すことができます。

public bool Navigate(string url, string postData, GeckoLoadFlags loadFlags)
{
    if (url == null)
    {
        throw new ArgumentNullException("url");
    }

    if (!IsHandleCreated)
    {
            throw new InvalidOperationException("Cannot call Navigate() before the window handle is created.");
    }

    if (IsBusy)
    {
        this.Stop();
    }

    return WebNav.LoadURI(url, (uint)loadFlags, null, GetStreamFromString(postData), IntPtr.Zero) == 0;
}

public static Stream??? CreateStreamFromString(string input)
{
    return new StreamReader???(input);
}

LoadURIメソッドがパラメータを受け入れることに注意してくださいnsIInputStream。これは私にはわかりません。パラメータタイプとそれをインスタンス化する方法を見つけてCreateStreamFromString()、正しいタイプを返し、インスタンス化するようにメソッドを修正してください。

パラメータのドキュメントも確認してください。postData

URIがHTTPリクエストに対応している場合、このストリームはHTTPリクエストヘッダーに直接追加されます。追加のHTTPヘッダーをプレフィックスとして付けることができます。このストリームには、HTTPヘッダーをHTTPリクエスト本文から分離する\ r\nシーケンスが含まれている必要があります。このパラメーターはnullである可能性があります。


ただし、データを特定のURLに投稿するためだけに使用する場合は、WebClientまたはHttpClient(.NET 4.5のみ)クラスを使用することをお勧めします。

于 2012-11-24T16:26:51.823 に答える