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

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

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

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

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

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

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

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

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

        投票实例,服务器有点慢,可能需要等十几秒钟,弹框提示即可

           http://www.zuiui.com/dream.html

        如果兄弟投了,鄙人十分感谢,好啦,咱们还是交流学习吧:

程序代码:
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( 072);  //  由于有些网站投票需要限制用户名,因此随即生成用户名(数组)
             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
      
        知识点差不多就这些了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值