winfrom webBrowser设置默认Useragent



通常我们使用  webBrowser1.Navigate(“http://www.test.com”, “”, System.Text.Encoding.UTF8.GetBytes(“”), heads);  可以实现请求过程上自定义Useragent,但是如果控件内部连接点击,或者ajax请求的时候 ,就无法控制了。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Runtime.InteropServices;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using Microsoft.Win32;
  10. namespace WebBrowserWinForm
  11. {
  12.     public class UserAgentHelper
  13.     {
  14.         private static string defaultUserAgent = null;
  15.         [DllImport(“urlmon.dll”, CharSet = CharSet.Ansi)]
  16.         private static extern int UrlMkSetSessionOption(int dwOption, string pBuffer, int dwBufferLength, int dwReserved);
  17.         const int URLMON_OPTION_USERAGENT = 0x10000001;
  18.         /// <summary>
  19.         /// 在默认的UserAgent后面加一部分
  20.         /// </summary>
  21.         public static void AppendUserAgent(string appendUserAgent)
  22.         {
  23.             if (string.IsNullOrEmpty(defaultUserAgent))
  24.                 defaultUserAgent = GetDefaultUserAgent();
  25.             string ua = defaultUserAgent + “;” + appendUserAgent;
  26.             ChangeUserAgent(ua);
  27.         }
  28.         /// <summary>
  29.         /// 修改UserAgent
  30.         /// </summary>
  31.         public static void ChangeUserAgent(string userAgent)
  32.         {
  33.             UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, userAgent, userAgent.Length, 0);
  34.         }
  35.         /// <summary>
  36.         /// 一个很BT的获取IE默认UserAgent的方法
  37.         /// </summary>
  38.         public static string GetDefaultUserAgent()
  39.         {
  40.             WebBrowser wb = new WebBrowser();
  41.             wb.Navigate(“about:blank”);
  42.             while (wb.IsBusy) Application.DoEvents();
  43.             object window = wb.Document.Window.DomWindow;
  44.             Type wt = window.GetType();
  45.             object navigator = wt.InvokeMember(“navigator”, BindingFlags.GetProperty,
  46.                 null, window, new object[] { });
  47.             Type nt = navigator.GetType();
  48.             object userAgent = nt.InvokeMember(“userAgent”, BindingFlags.GetProperty,
  49.                 null, navigator, new object[] { });
  50.             return userAgent.ToString();
  51.         }
  52.     }
  53. }

最后在初始化webbrowser以后 调用静态方法即可,例如:

UserAgentHelper.ChangeUserAgent(” Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36″);