修改Windows Phone WebBrowser控件的User-Agent

时间:2012-08-29 19:28:43

标签: windows-phone-7 webbrowser-control

我们的Windows Phone 7x应用程序中嵌入了WebBrowser。这个WebBrowser指向我们的Web服务器。我们需要能够区分来自应用程序的请求和来自本机浏览器的请求(例如,嵌入在另一个应用程序中的WebBrowser)。为此,我们要修改来自所述WebBrowser的所有HTTP请求的User-Agent。

但是,我找不到办法做到这一点。我最初的想法是简单地覆盖添加“additionalHeaders”的导航功能。不幸的是,WebBrowser类是密封的,因此该选项根本不是一个选项。我已经搜索了一个属性或处理程序的高低,这个属性或处理程序暴露出来,我可能无法利用它。

那么,简而言之,有没有办法为所有出站HTTP请求修改WebBrowser的User-Agent?

3 个答案:

答案 0 :(得分: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不包含“!!!”,则它是来自单击链接的请求,WebBrowser取消导航,并使用您的自定义用户代理重新导航并“!!!”在查询字符串中。

答案 1 :(得分: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");
        }
    }

答案 2 :(得分:0)

在调用导航方法时,通过其他标头设置用户代理。详情here