2

Windows Phone 7x アプリケーションには WebBrowser が組み込まれています。この WebBrowser は、当社の Web サーバーを指しています。アプリからのリクエストと、ネイティブ ブラウザ (または別のアプリに埋め込まれた WebBrowser など) からのリクエストを区別できる必要があります。これを行うには、前述の WebBrowser からのすべての HTTP リクエストの User-Agent を変更したいと考えています。

しかし、これを行う方法が見つかりません。私が最初に考えたのは、単純に「additionalHeaders」を追加して Navigate 関数をオーバーライドすることでした。残念ながら、WebBrowser クラスは封印されているため、そのオプションはまったくありませんでした。公開されているプロパティまたはハンドラーを高低で検索しましたが、それを利用して無駄になる可能性があります。

要するに、すべての送信 HTTP 要求に対して WebBrowser の User-Agent を変更する方法はありますか?

4

3 に答える 3

2

この質問は古いことは知っていますが、これが誰にとっても役立つ場合は、WebBrowser のナビゲーション イベントにいつでもこれを使用できます。

    void wb_Navigating(object sender, NavigatingEventArgs e)
    {
        if (!e.Uri.ToString().Contains("!!!"))
        {
            e.Cancel = true;
            string url = e.Uri.ToString();
            if (url.Contains("?"))
                url = url + "&!!!";
            else
                url = url + "?!!!";
            wb.Navigate(new Uri(url), null, "User-Agent: " + "Your User Agent");
        }
    }

「!!!」を追加するだけです。カスタム ユーザー エージェントを持つナビゲーションのすべての URL に。URL に「!!!」が含まれていない場合、それはクリックされたリンクからのリクエストであり、WebBrowser はナビゲーションをキャンセルし、カスタム ユーザー エージェントと「!!!」で再度ナビゲートします。クエリ文字列で。

于 2013-06-27T03:46:59.417 に答える
2

私は msbg に対して同様のアプローチを試みました。そこでは、URL をメモリに保存して二重チェックを避け、!!! で変更することを避けます。ただし、この方法では POST データが保持されないため、役に立ちません。

List<string> recentlyRequestedUrls = new List<string>();

    void wb_Navigating(object sender, NavigatingEventArgs e)
    {
        if(!recentlyRequestedUrls.Contains(e.Uri.ToString()))
        {
            //new request, reinitiate it ourselves and save that we did to avoid infinite loop.
            e.Cancel = true;
            string url = e.Uri.ToString();
            recentlyRequestedUrls.Add(url);
            webBrowser1.Navigate(new Uri(url), null, "User-Agent: Your_User_Agent");
        }
    }
于 2013-09-03T00:10:30.220 に答える
0

Navigateメソッドを呼び出すときに、追加のヘッダーを介してユーザー エージェントを設定します。詳細はこちら

于 2012-08-31T13:52:17.473 に答える