相信大家身边有很多朋友有时候请大家投各种票,刚好,这会儿也有朋友找我投票,身为IT程序开发人员,总觉得投机取巧一点。

如果仅仅只是点击即可投票,那相对而言就简单了,然而,有些网站限制IP,那么情况就不一样了。

如果您是拨号上网用户,可以重连路由,改变外网IP地址,不过,这种方式有时候也不奏效。

于是我采用了IP代理的方式来自动投票。

这样,一般人会这样:更改IE浏览器的代理设置,打开IE浏览器输入投票网址(这里需要各位自己找直接投票的url)投票。

但是问题又出来了,每次投票都得重启浏览器才行,我个人觉得浏览器打开的一些设置已经保存在了缓存中

虽然在更改代理的时候更改了注册表项值,但浏览器并没有实时去读取这个值

因此,鄙人编写了一个小程序用于自动投票。下面是该程序的关键代码:

private void StartVote()
        {
            this.lbl_daili.Text = lst.Items.Count.ToString(); //获取代理
            this.wbCnblog.Focus(); //浏览器窗口获取焦点。由于有些投票连接直接弹出alert提示,因此获取焦点,以自动回车防止程序暂停
            int itemcount = lst.Items.Count;//获取代理列表,已循环代理访问
            string[] urls = new string[itemcount]; //用于保存所有将要访问的投票链接地址
            string[] proxyurl_ip = new string[itemcount];// 代理 IP
            string[] proxyurl_port = new string[itemcount];// 代理 Port
            Random rad = new Random();
            int y = rad.Next(0, 72); // 由于有些网站投票需要限制用户名,因此随即生成用户名(数组)
            for (int i = 0; i < itemcount; i++)
            {
                int x = y + i;
                if (x >= 72)
                {
                    x = x % 72;
                }
                urls[i] = "http://www.xxoo.com?name=" + mingzi[x];
                lst.Items[i].Selected = true; //选择当前item,提取IP 以及 端口号,保存在数组中
                proxyurl_ip[i] = lst.SelectedItems[0].SubItems[0].Text;
                proxyurl_port[i] = lst.SelectedItems[0].SubItems[1].Text;
            }
            GetHtml(urls, proxyurl_ip, proxyurl_port); //访问站点获取站点内容
            Application.Exit();//程序结束
        }
      访问站点获取HTML:
      #region 自定义方法
        bool loading = true;   //该变量表示网页是否正在加载.
        string html = string.Empty;
        WebBrowser browser = new WebBrowser();
        int successcount = 0;
        int failurecount = 0;
        int bugcount = 0;
        string temp_proxy = "";
        string current_proxy = ""; //当前代理,用于些日志用到,相当于排他锁的作用
        public void GetHtml(string[] urls, string[] proxyurls_ip, string[] proxyurls_port)
        {
            wbCnblog.DocumentText = "页面加载中...";
            wbCnblog.Navigated += new WebBrowserNavigatedEventHandler(browser_Navigated);//页面加载时执行 browser_Navigated ,获取返回内容,并写成功日志
            for (int i = 0; i < urls.Length; i++)
            {
                loading = true;  //表示正在加载
                NaviByProxy(  //代理访问URL
                        proxyurls_ip[i], //选中的代理IP地址
                        proxyurls_port[i], //选中的代理IP的端口
                        urls[i]//url地址
                        );
                while (loading)  //记录状态
                {
                    this.txt_info.Text = "正通过代理" + proxyurls_ip[i] + ":" + proxyurls_port[i] + "进行投票";
                    this.textBox_url.Text = urls[i];
                    current_proxy = proxyurls_ip[i] + ":" + proxyurls_port[i];
                    try
                    {
                        Application.DoEvents();//等待本次加载完毕才执行下次循环.
                    }
                    catch
                    {
                        bugcount++;
                        this.txt_result.Text = "成功" + successcount + "个" + "/失败" + failurecount + "个/错误" + bugcount + "个";
                        continue;
                    }
                }
            }
            this.txt_result.Text += "此轮投票已经结束";
        }
        #endregion
        
        以下代码则是 加载内容:
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        //  Create by Charles 2012-11-25 13:23
        void browser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            if (current_proxy != temp_proxy) //排他锁的作用
            {
                html = wbCnblog.DocumentText;  //获取到的html.
                this.wbCnblog.DocumentText = "";
                if (html.Contains("生活快乐"))
                {
                    //this.txt_result.Text += html;
                    this.txt_status.Text = "成功";
                    successcount++;
                    this.txt_result.Text = "成功" + successcount + "个" + "/失败" + failurecount + "个/错误" + bugcount + "个";
                    this.txt_success.Text += current_proxy + "|";
                    WriteText(current_proxy + "----投票成功----" + DateTime.Now + Environment.NewLine); //写日志文件
                }
                else
                {
                    this.txt_status.Text = "失败";
                    failurecount++;
                    this.txt_result.Text = "成功" + successcount + "个" + "/失败" + failurecount + "个/错误" + bugcount + "个";
                }
                loading = false;//在加载完成后,将该变量置为false,下一次循环随即开始执行.
                this.wbCnblog.Focus();
                SendKeys.Send("{Enter}"); //如果存在弹窗,回车确定,防止程序暂定
                //this.Focus();
                //SendKeys.Send("{Enter}");
                //this.wbCnblog.Document.Focus();
                //SendKeys.Send("{Enter}");
                temp_proxy = current_proxy;
            }
        }
        关于写日志文件,我想应该就相对来说简单多了,就是简单的写文本文件
         /// <summary>
        /// 写成功日志文件
        /// </summary>
        /// <param name="text"></param>
        // Create By Charles 2012-11-25 21:31
        public void WriteText(string text)
        {
            FileStream fs = new FileStream(Path.Combine(Application.StartupPath, "succes_log.txt"), FileMode.Append);
            StreamWriter sw = new StreamWriter(fs, Encoding.Default);
            sw.Write(text);
            sw.Close();
            fs.Close();
        }
        差点忘了,还有一个很重要的代码,便是刷新 代理 注册表
        #region 读取并设置浏览器的proxy server信息
        RegistryKey pregkey;
        pregkey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true);
        if (pregkey == null)
        {
            this.txt_info.Text = "键值不存在!";
        }
        else
        {
            pregkey.SetValue("ProxyServer", lst.SelectedItems[0].SubItems[0].Text + ":" + lst.SelectedItems[0].SubItems[1].Text);
            this.txt_info.Text = pregkey.GetValue("ProxyServer").ToString();
        }
        #endregion
        
        知识点差不多就这些了,有兴趣的朋友可以留言交流交流
        下载地址:http://download.csdn.net/download/shenchaoming/5133965

转载于:https://www.cnblogs.com/shenchaoming/archive/2012/11/25/ProxyVote.html

关于 【通过代理访问】 的研究,【突破 IP ,“无限制”投票】相关推荐

  1. 投票作弊程序制作思路(续)——突破IP限制投票

    上个星期,给朋友作了一个投票作弊的小程序<投票作弊程序制作思路>,后来,本来也相安无事.但是可能是朋友玩的过火了.他给自己投了1万多票了,而其他人还只有几百票,于是网站管理员发现了这个情况 ...

  2. 让IE部分网站或IP进行代理访问

    让IE只对指定的网站使用代理,可以使用系统自带的代理脚本功能,自动为我们设定的网站使用代理! 这个要使用代理自动配置脚本代码如下: function FindProxyForURL(url,host) ...

  3. php使用curl进行IP代理访问

    php使用curl进行IP代理访问的操作如下所示: header("Content-type: text/html; charset=utf-8"); //测试验证代理 $requ ...

  4. php禁止代理ip访问_php如何禁止代理访问

    php禁止代理访问的方法:首先打开相应的脚本文件:然后通过"if($_SERVER['HTTP_PROXY_CONNECTION'] || $_SERVER['HTTP_VIA']...){ ...

  5. Tor网络突破IP封锁,爬虫好搭档【入门手册】

    本文地址:http://www.cnblogs.com/likeli/p/5719230.html 前言 本文不提供任何搭梯子之类的内容,我在这里仅仅讨论网络爬虫遇到的IP封杀,然后使用Tor如何对抗 ...

  6. 如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票

    一.前言 看个图,了解下投票的过程. 提交投票信息 投票页 ――――――――>投票信息处理页 反馈投票结果 (请求页)<―――――――(响应页) 一般情况下,填写投票信息,然后点提交按钮发 ...

  7. YiLu代理中住宅IP代理和数据中心/机房IP代理分析及对比

    YiLu代理的代理IP池根据代理类型分类的话主要可以分为住宅IP代理和数据中心/机房IP代理2大类,本文主要讲解下YiLu Proxy中住宅IP代理和数据中心/机房IP代理它们各自的特点以及两者之间存 ...

  8. 红蓝对抗之隧道技术第一篇(内网穿透、端口映射端口转发、Netsh端口转发、CS正反向连接多层内网、Burp设置上游代理访问内网、MSF protfwd端口转发/重定向)

    文章目录 隧道应用 端口映射&端口转发 Netsh端口转发 Netsh端口转发meterpreter CS正向连接多层内网 CS反向连接多层内网 Burp设置上游代理访问内网 MSF prot ...

  9. 一文看尽谷歌AI全年重大研究突破,Jeff Dean执笔,全程干货

    本文经AI新媒体量子位(公众号ID:qbitai )授权转载,转载请联系出处 本文约一万字,建议阅读10+分钟. 学术和应用两开花,开源和新技术同步推进. 刚刚,Jeff Dean代表Google A ...

最新文章

  1. 各类木材强度_层状磷酸锆/ 聚磷酸铵复合阻燃剂对木材的阻燃抑烟性能研究
  2. SAP HUM 嵌套HU的场景下内向交货单Relationship Browser里只显示内层HU
  3. 人工智能70年:科幻和现实的交融
  4. STM32开发 -- 数据搜索
  5. python查询oracle数据库_python针对Oracle常见查询操作实例分析
  6. jQuery EasyUI datagrid实现本地分页的方法
  7. 60-150-044-使用-Sink-Flink自定义RetractStreamTableSink
  8. java事件 socket_java中有关socket通信的学习笔记
  9. 让服务器自动从HG版本库中下载代码
  10. OJ 21658::Monthly Expense(二分搜索+最小化最大值)
  11. 数据冲突Statspack ORA-00001 unique constraint violated错误的解决
  12. gohost -- go 开发的命令行hosts配置管理工具 1
  13. 待办事项列表,敏捷项目管理的核心工件
  14. 87个电影调色PR预设包
  15. “华为杯”第十八届中国研究生数学建模竞赛B题参赛总结
  16. 向日葵的约定(歌词中日对译)
  17. 微信小程序 - 无法获取云端数据库中的数据的问题(修改云端数据库权限)
  18. 神经网络模型的训练过程,神经网络模型应用实例
  19. TCGA数据库的学习-系列一
  20. 智哪儿现场:凯迪仕建博会发布新品“千里眼”智能锁K20 Pro Max,行业新标杆

热门文章

  1. Unity性能优化 – 脚本篇
  2. 资源不关闭,会导致什么最坏的结果
  3. 微软给程序代码加的css效果
  4. js操作改变原数组的解决方法
  5. 怎么解决深入学习PHP的瓶颈
  6. app pay开发遇到的坑
  7. Codevs 1010 过河卒 2002年NOIP全国联赛普及组
  8. activiti入门2流程引擎API和服务基础设施
  9. Hadoop Hbase适合存储哪类数据?(转)
  10. Js+DVML:很酷实用的右键弹出菜单