刷票大战(三)——C#自动POST数据

本文介绍了一款使用C#编写的简易程序,能够自动从指定网址获取验证码图片,并向服务器POST数据。此外,还讨论了如何通过Tesseract-OCR进行验证码自动识别。

前言:前面两篇已经很大程度上解放了人力,但我想别人的刷票软件是怎么制作出来的呢,肯定有办法让程序自动发包。由此,利用C#写了个小程序,自动POST数据到服务器处理程序,但这只是一个半成品,由于今天投票网站已经关闭了,无法测试实用性,就此罢手,作以记录,有相同经历的同鞋们,可以试一下看,如果能试出来正确的方法,记得分享给我哦,谢啦。


相关文章:

1、《刷票大战(一)——突破IP限制》
2、《刷票大战(二)——自动填充功能实现》
3、《刷票大战(三)——C#自动POST数据》


本篇完成两个功能:

1、根据动态验证码地址生成验证码图片并显示。

2、向指定处理网站POST数据。

软件截图:



一、生成验证码图片并显示代码

由于C#代码难度不大,这里就不再细讲了,仅贴出代码,最后给出源码,大家可以参考;

private void button1_Click(object sender, EventArgs e)
{
    System.Net.ServicePointManager.Expect100Continue = false;
    Uri uri = new Uri("http://edu.sqzycc.com/inc/checkcode.asp");

    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream resStream = response.GetResponseStream();//得到验证码数据流
    Bitmap sourcebm = new Bitmap(resStream);//初始化Bitmap图片
    //sourcebm.Save(@"C:\test.gif", ImageFormat.Gif);//可以保存到本地
    this.pictureBox1.Image = sourcebm;


}

二、向服务器处理程序POST数据

private void button2_Click(object sender, EventArgs e)
{
    System.Net.ServicePointManager.Expect100Continue = false;
    //string strsubmit = "YES";
    ASCIIEncoding encoding = new ASCIIEncoding();

    string data2 = this.textBox1.Text;
    string postData = "pr_id=1&hxr=26&hxr=30&hxr=33&hxr=39&hxr=53&hxr=54&hxr=66&hxr=69&hxr=70&hxr=81&code=" + data2 + "&cid=411402198807885982&x=9&y=5";
    this.label1.Text = postData;
    byte[] data = encoding.GetBytes(postData);

    // Prepare web request...
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://edu.sqzycc.com/do.asp?action=post");

    myRequest.Method = "POST";
    myRequest.ContentType = "application/x-www-form-urlencoded";
    myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
    myRequest.ContentLength = data.Length;
    Stream newStream = null;
    try
    {
        newStream = myRequest.GetRequestStream();

    }
    catch (Exception ex)
    {

        this.label2.Text = ex.Message;
        return;
    }


    // Send the data.
    newStream.Write(data, 0, data.Length);
    newStream.Close();


    // Get response
    HttpWebResponse httpWebResponse = null;
    try
    {
        httpWebResponse = (HttpWebResponse)myRequest.GetResponse();
    }
    catch (Exception ex)
    {
        this.label2.Text = ex.Message;
        return;
    }

    Stream responseStream = httpWebResponse.GetResponseStream();

    //这段用来获取返回信息的编码方式,以防乱码
    Encoding MyEncoding = Encoding.Default;
    // 如果要下载的页面经过压缩,则先解压
    if (httpWebResponse.ContentEncoding.ToLower().IndexOf("gzip") >= 0)
    {
        responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
    }

    if (MyEncoding == null)
    {
        MyEncoding = Encoding.Default;
    }

    StreamReader reader = new StreamReader(responseStream, MyEncoding);
    string content = reader.ReadToEnd();
    this.label2.Text = content;

}


写于最后,至于如何得知后台处理程序的地址的,可以在IE中使用HttpWatch抓包实现,也可以在chrome中使用“开发者工具”下的Network标签

当选中“preserve log”时,该程序就会持序记录网络行为。(源码在最后)


三、关于验证码自动识别

关于验证码自动识别的问题,昨天我稍微研究了一下,主要用到Tesseract-OCR,这个东东就可以做到图片自动识别,但我试了下,一般而言,识别率不太高;如果针对特定网站做验证识别的话,可能要对Tesseract进行数据训练,以提高准确率。

对于程序自动识别网站验证码的一点心得:

1、首先将根据验证码地址生成图片保存在本地。

2、然后使用Tesseract识别。

这里有几篇文章,大家可做参考:

《Tesseract学习(三)》:在VC++中调用Tesseract库

《Tesseract学习(四)》:在C#中调用Tesseract库

《Tesseract-OCR安装使用训练》

《使用Tesseract (OCR)实现简单的验证码识别(C#)+窗体淡入淡出效果》

《Tesseract-OCR 字符识别---样本训练 [转]》

 《使用Tesseract-OCR在loadrunner中识别验证码》

 《tesseract-ocr》  tesseract-ocr源码地址

 

 本文源码地址:http://download.youkuaiyun.com/detail/harvic880925/7488709

 

 请大家尊重原创者权版,转载请标明出处:http://blog.youkuaiyun.com/harvic880925/article/details/30246651 ,不胜感激!!!!!!


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值