using System;
using System.Drawing;
using System.IO;
using System.Net;
using System.Text;
using System.Windows.Forms;

namespace 用POST提交带验证码的网站
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }

//用于保存cookie
        CookieContainer cc = new CookieContainer();

//获取cookie
        private void GetCookie()
        {
            try
            {
                //要post提交的地址。先用HttpWebRequest进行请求以得到cookie,并保存起来在后面获取验证码的时候使用
                Uri uri = new Uri("http://61.142.253.40:8085/Login.aspx");
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

//将当前cookie存储到CookieContainer中
                cc.Add(response.Cookies);
                response.Close();
            }
            catch { }
        }

//读取验证码图片
        private void GetImage()
        {
            try
            {
                //验证码地址
                Uri uri = new Uri("http://61.142.253.40:8085/CheckCode.aspx");
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);

//设置前面请求时保存下来的cookie,以保证两个请求是相同的,才不会出现验证码不同步的问题
                request.CookieContainer = cc;
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

//得到验证码数据流
                Stream resStream = response.GetResponseStream();

//初始化Bitmap图片并在pictureBox1控件中显示
                Bitmap image = new Bitmap(resStream);
                this.pictureBox1.Image = image;
            }
            catch { }
        }

/// <summary>
        /// 提交数据
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="passWord">密码</param>
        /// <param name="code">验证码</param>
        /// <returns>提交数据后的返回值</returns>
        private string SubmitData(string userName, string passWord, string code)
        {
            try
            {
                string url = string.Format("http://61.142.253.40:8085/Ajax.aspx?action=Login&Name={0}&Password={1}&ucode={2}", userName, passWord, code);
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

//设置cookie,保证请求同步
                request.CookieContainer = cc;

//获取响应
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    //注意这里要根据网站编码格式变换
                    using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8")))
                    {
                        return sr.ReadToEnd();
                    }
                }
                else
                {
                    return response.StatusCode.ToString();
                }
            }
            catch
            {
                return null;
            }

}

private void Form1_Load(object sender, EventArgs e)
        {

}

private void btnSubmit_Click(object sender, EventArgs e)
        {
           txtResult.Text = SubmitData(txtUser.Text, txtPassword.Text, txtCode.Text);
        }

private void lbWebSite_Click(object sender, EventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start("http://www.weixq.cn");
                System.Diagnostics.Process.Start("http://www.jfkjw.com");
            }
            catch { }
        }

private void lbQQ_Click(object sender, EventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start("http://wpa.qq.com/msgrd?v=3&uin=240452625&site=qq&menu=yes");
            }
            catch { }
        }

private void btnRefresh_Click(object sender, EventArgs e)
        {
            FrmMain_Load(null, null);
        }

private void FrmMain_Load(object sender, EventArgs e)
        {
            //获取cookie和验证码图片
            GetCookie();
            GetImage();
        }
    }
}

用HttpWebRequest提交带验证码的网站的更多相关文章

  1. 使用C#登录带验证码的网站

    我在上一篇文章中已经讲解了一般网站的登录原来和C#的登录实现,很多人问到对于使用了验证码的网站该怎么办,这里我就讲讲验证码的原理和对应的登录方法.验证码的由来几年前,大部分网站.论坛之类的是没有验证码 ...

  2. php使用curl模拟登录带验证码的网站[开发篇]

    需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! <?php namespace Home\ ...

  3. php使用curl模拟登录带验证码的网站

    需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! <?php namespace Home\ ...

  4. 模拟Post登陆带验证码的网站

    前言: 作者在一个项目需求 模拟用户登陆,获取该用户的订单记录. 该系统需要用户名,密码,验证码 (验证码为正楷的数字4位),于是参考网络一些文章,并进行了很多测试,总结步骤如下: 步骤1 : 通过h ...

  5. 利用htmlunit登陆带验证码图片的网站

    http://htsoft.org/html/y2011/822_using-htmlunit-landing-site-with-captcha-image.html 利用htmlunit登陆带验证 ...

  6. Jsoup爬取带登录验证码的网站

    今天学完爬虫之后想的爬一下我们学校的教务系统,可是发现登录的时候有验证码.因此研究了Jsoup爬取带验证码的网站: 大体的思路是:(需要注意的是__VIEWSTATE一直变化,所以我们每个页面都需要重 ...

  7. C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站

    原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...

  8. [转载]python实现带验证码网站的自动登陆

        原文地址:python实现带验证码网站的自动登陆作者:TERRY-V 早听说用python做网络爬虫非常方便,正好这几天单位也有这样的需求,需要登陆XX网站下载部分文档,于是自己亲身试验了一番 ...

  9. curl 模拟登录微信公众平台带验证码

    这段时间一直写个项目, 从切图到前端到后台都要搞定,真tm累. 今天下午手残,不停用错误的密码去模拟登录微信公众平台,结果后来出现验证码,瞬间悲剧(菜鸟从来没搞过带验证码的). 研究了一下,发现其实很 ...

随机推荐

  1. Ionic开发实战

    转自:http://blog.csdn.net/i348018533/article/details/47258449/ 折磨的两个月!Ionic从零单排,到项目发布!遇到了很多问题但都一一解决了,此 ...

  2. JAXB最佳实践

    JAXB主要用来实现对象和XML之间的序列化和反序列化. 本文主要总结JAXB基本使用方法和注意事项! 通过下文的XML示例内容进行JAXB的简单实践 <?xml version="1 ...

  3. [PHP] - Apache + PHP 环境搭建

    Apache和PHP的版本分别为: httpd-2.4.9-win64-VC11.zip php-5.6.9-Win32-VC11-x64.zip 下载地址: php-5.6.9-Win32-VC11 ...

  4. xcode8让真机测试支持ios8.0以下版本

    xcode8支持ios8以下真机测试方法: 1.应用程序-xcode 显示包内容-Contents-Developer-Platforms-iPhoneOS.platform-DeviceSuppor ...

  5. B2B商城网站前端开发

    最近在时间很忙,在弄一个B2B商城,运用到的easyUI+javaWEB(maven)+JQuery+Scss+JavaScript+其他框架(sea.js模块化等),我负责前端这块:后期的重要的前端 ...

  6. i2c 读写

    在I2C设备读取,必须是在同一个周期内. 一个例子,可以同时读出两个值 int read_register_double_value(int reg_addr, unsigned char *valu ...

  7. 分配和释放 BSTR 的内存

    本文档已存档,并且将不进行维护. 分配和释放 BSTR 的内存 Visual Studio .NET 2003                  转自: https://msdn.microsoft. ...

  8. 带你入门带你飞Ⅱ 使用Mocha + Chai + SuperTest测试Restful API in node.js

    目录 1. 简介 2. 准备开始 3. Restful API测试实战 Example 1 - GET Example 2 - Post Example 3 - Put Example 4 - Del ...

  9. CentOS 7安装Sublime text3

    最近使用centos7,发现桌面有了大的改善,完全能够使用桌面进行开发.现在进行sublime text3的安装. 官网下载只有windows,ios,ubuntu这几个类型,我们选择ubuntu64 ...

  10. Emergency(山东省第一届ACM省赛)

    Emergency Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Kudo’s real name is not Kudo. H ...