c# webbrower 修改UA头

2017-8-31 admin C# Visual Studio

最近在做个什么广告点击的功能工具,其中需要的就是模拟修改各种浏览器UA头,这里记录一下方法

新建一个类


using System;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;

namespace 广告点击
{
    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();
        }
    }
}

那么怎么调用呢,在方法内调用下面这个代码
         StreamReader txtReader = new StreamReader(Application.StartupPath + "\\ua.txt");//读取UA标识

        private void Form1_Load(object sender, EventArgs e)
        {
          
            for (int i = 1; i < 10000; i++)
            {
                reader[i] = txtReader.ReadLine();
                // MessageBox.Show(reader[i]);
            }
        }

UserAgentHelper.AppendUserAgent(UserAgentHelper.GetDefaultUserAgent());
UserAgentHelper.ChangeUserAgent(reader[i]);//括号内调用UA变量就行了
这个类的好处是,调用了一次后,点击任何链接的UA都是修改过的


发表评论:

Powered by X兵器库 桂ICP备16000990号
sitemap
返回顶部