通常我们使用 webBrowser1.Navigate(“http://www.test.com”, “”, System.Text.Encoding.UTF8.GetBytes(“”), heads); 可以实现请求过程上自定义Useragent,但是如果控件内部连接点击,或者ajax请求的时候 ,就无法控制了。
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Windows.Forms;
- using Microsoft.Win32;
- namespace WebBrowserWinForm
- {
- public class UserAgentHelper
- {
- private static string defaultUserAgent = null;
- [DllImport(“urlmon.dll”, CharSet = CharSet.Ansi)]
- private static extern int UrlMkSetSessionOption(int dwOption, string pBuffer, int dwBufferLength, int dwReserved);
- const int URLMON_OPTION_USERAGENT = 0x10000001;
- /// <summary>
- /// 在默认的UserAgent后面加一部分
- /// </summary>
- public static void AppendUserAgent(string appendUserAgent)
- {
- if (string.IsNullOrEmpty(defaultUserAgent))
- defaultUserAgent = GetDefaultUserAgent();
- string ua = defaultUserAgent + “;” + appendUserAgent;
- ChangeUserAgent(ua);
- }
- /// <summary>
- /// 修改UserAgent
- /// </summary>
- public static void ChangeUserAgent(string userAgent)
- {
- UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, userAgent, userAgent.Length, 0);
- }
- /// <summary>
- /// 一个很BT的获取IE默认UserAgent的方法
- /// </summary>
- public static string GetDefaultUserAgent()
- {
- WebBrowser wb = new WebBrowser();
- wb.Navigate(“about:blank”);
- while (wb.IsBusy) Application.DoEvents();
- object window = wb.Document.Window.DomWindow;
- Type wt = window.GetType();
- object navigator = wt.InvokeMember(“navigator”, BindingFlags.GetProperty,
- null, window, new object[] { });
- Type nt = navigator.GetType();
- object userAgent = nt.InvokeMember(“userAgent”, BindingFlags.GetProperty,
- null, navigator, new object[] { });
- return userAgent.ToString();
- }
- }
- }
最后在初始化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″);