正在更改UWP应用程序WebBrowser控件中的用户代理标头

本文关键字:用户代理 控件 WebBrowser UWP 应用程序 | 更新日期: 2024-09-20 14:48:53

如何在UWP应用程序WebBrowser控件中全局更改用户代理标头?

我可以更改webbrwser控件中加载的初始url中的用户代理标头

httpRequestMessage.Headers.Append("User-Agent", ...); 
browser.NavigateWithHttpRequestMessage(httpRequestMessage); 

但从网页重定向的任何内部链接似乎都不使用这个自定义用户代理标头。

正在更改UWP应用程序WebBrowser控件中的用户代理标头

与Android或iOS不同,Microsoft没有公开在WebView组件中全局更改用户代理的方法。

对于单独的GET或POST请求,您可以这样设置UA:

Uri^ targetURL = ref new Uri("http://www.yourUrlString.com");
HttpClient^ newRequest = ref new HttpClient();
auto headers = newRequest->DefaultRequestHeaders;
headers->UserAgent->TryParseAdd("your user-agent string here");
create_task(newRequest->GetAsync(targetUrl)).then([=](HttpResponseMessageData^ data) 
{
   //Your callback here
});

使用该技术,可以连接到WebView的NavigationStarting事件并拦截每个请求,但我强烈建议不要这样做

WebViewNavigationStartingEventArgs只公开您要导航到的Uri,以及取消请求的能力。它没有公开它是什么类型的请求,也没有公开意图来自哪里。正因为如此,不可能重新创建最初的导航意图,您将开始看到导航错误。

例如,有些网页有JavaScript元素,可以在单击按钮时发出POST请求,如果您拦截这些请求并将其重新创建为GET请求,则请求将失败,用户的操作将丢失。

在微软改变WebView中的这种行为之前,我认为不可能有意义地改变UA。