• 投票机的实现及相关技术


    转载自:http://xiaohui.cnblogs.com/archive/2006/04/03/365735.html 投票机的实现及相关技术(一) 本文仅限于投票机技术的讨论与学习,请大家以后不要再留言索求XXXXX的投票机了,我是不会写的。谢谢! 这几天没日没夜,就为了一个网络投票。在网上找了一下,还有很多收费的投票机,而且还不便宜,效率似乎也不是很高,自己动手写了一个。(原创文章,转载请联系我) 其实投票机就是一个往目标服务器Post数据,看以下代码,
    cl = new WebClient();
    cl.Headers.Add("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
    cl.Headers.Add("Referer", idxPage);
    cl.Headers.Add("Accept-Language", "en-us");
    cl.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
    cl.Headers.Add("UA-CPU", "x86");
    cl.Headers.Add("Accept-Encoding", "gzip, deflate");
    string result = cl.UploadString(votePage, "POST", "R1=xx&B1=%CD%B6%C6%B1");
    
    以上的代码很简单,就是往服务器Post一个“R1=xx&B1=%CD%B6%C6%B1”数据,前面的cl.Headers.Add(…..)是伪造一个请求的头。 以上是一个简单的实现,很多服务器都进行IP判断,这样以上代码投完服务器指定的每IP投多少票后,就不能再投了。下面就是使用代理服务器。
    WebProxy proxy = new WebProxy(hostip, hostport);
    cl.Proxy = proxy;
    
    使用了代理服务器后,如果服务器不进行代理服务器的检测,那么每换一次代理,就相当于换了新的IP。代理当然可以实现程序自动更换,比如说你先取一个列表,然后随机从列表中去,具体代码我就不贴出来了。 投票程序如果加了验证码,那么就要取得验证码,单纯的数字验证,相当简单,我就不说了,这里说一下使用图形验证码,看下面图形(相对比较简单的图形验证) 上面的图片中,只有数字,虽然数字颜色不同,但没躁点,无干扰线,还有就是背景色是不变的,现在思路就是,读取图片,把图片中的单个数字截取出来,再转换成黑白色,也就是说如果当前象素如果是背景色,就转换成白色,反之转换成黑色。这里只是提供一条思路,具体如何实现可以参考(http://blog.csdn.net/qqwwee_com/archive/2005/08/14/454335.aspx)。以下是代码:
    static void LoadConfirmCodes()
           {
                  confirmCodes.Add(2035770595, 0);
                  confirmCodes.Add(-1323920242, 1);
                  confirmCodes.Add(1058416269, 2);
                  confirmCodes.Add(1098134340, 3);
                  confirmCodes.Add(-1631030313, 4);
                  confirmCodes.Add(558303261, 5);
                  confirmCodes.Add(-1882080145, 6);
                  confirmCodes.Add(-393449193, 7);
                  confirmCodes.Add(-1297745195, 8);
                  confirmCodes.Add(1862490155, 9);
           }
          static string GetConfirmCode(Bitmap bmp)
           {
                  Rectangle r1 = new Rectangle(0, 0, 6, 10);
                  Rectangle r2 = new Rectangle(10, 0, 6, 10);
                  Rectangle r3 = new Rectangle(20, 0, 6, 10);
                  Rectangle r4 = new Rectangle(30, 0, 6, 10);
                  Bitmap b1 = bmp.Clone(r1, bmp.PixelFormat);
                  Bitmap b2 = bmp.Clone(r2, bmp.PixelFormat);
                  Bitmap b3 = bmp.Clone(r3, bmp.PixelFormat);
                  Bitmap b4 = bmp.Clone(r4, bmp.PixelFormat);
                  return string.Format("{0}{1}{2}{3}", ImageToNumeric(b1),
                  ImageToNumeric(b2), ImageToNumeric(b3), ImageToNumeric(b4));
           }
           static int ImageToNumeric(Bitmap bmp)
           {
                  StringBuilder sb = new StringBuilder();
                  int height = bmp.Height - 1;
                  for (int i = 0; i < height; i++)
                  {
                         int width = bmp.Width - 1;
                         for (int j = 0; j <= width; j++)
                         {
                                Color color = bmp.GetPixel(j, i);
                                sb.Append(color.Name == "ffeeeeee" ? "0" : "1");
                         }
                  }
                  return confirmCodes[sb.ToString().GetHashCode()];
           }
    
    以上代码将像素点按背景和非背景转换成了字符串,然后取得Hash,然后将取回来的图片进行转换后与以存在的对比。当然,以有的库你必须先学习,也就是说你先必须从网站先学到(0-9)这10个图片,分析出字符串,得到每个数的Hash。 这里只是简单的说明了一个基本的投票机的原理,如果有足够的资源,而且不能使用代理的时候,就可以使用自动切IP(要求你有足够多的合法IP资源)和ADSL自动断线重拨(要求你有足够多的ADSL)。下一篇文章将说明如何切IP和ADSL自动断线重拨。
  • 相关阅读:
    vue 多层级嵌套组件传值 provide 和 inject
    vue 消息订阅与发布 实现任意组件间的通信
    成功
    疯掉的拼接
    解析发送
    一条条发
    com发送
    字符串拼接
    COM
    笨方法的combox级联
  • 原文地址:https://www.cnblogs.com/macleo/p/1234281.html
Copyright © 2020-2023  润新知