2

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

但是,我找不到这样做的方法。我最初的想法是简单地覆盖 Navigate 函数,添加“additionalHeaders”。不幸的是,WebBrowser 类是密封的,所以这个选项根本不是一个选项。我到处搜索了一个我可能无法利用的暴露的属性或处理程序。

那么,简而言之,有没有办法为所有出站 HTTP 请求修改 WebBrowser 的用户代理?

4

3 回答 3

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 回答
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 回答
0

在调用Navigate方法时,通过附加标头设置用户代理。详情在这里

于 2012-08-31T13:52:17.473 回答