文章 - 0&评论 - 169&trackbacks - 0
前两篇已把相应的准备工作和功能说明列了一下,今天就把详细的实现写一下,以后的将把的语音拨号系统,和手机短信群发的的实现也发上。
开始这次的内容。
首先就是需要用到模拟提交的两个类
&HttpHead.cs 这个类(其实是结构)它的主要功能就是封装了Http请求的一个头信息
using Susing System.Nusing System.D
namespace NetHelper {&&& /// &summary&&&& /// Http头信息设置&&& /// &/summary&&&& public struct HttpHead {&&&&&&& public String H //主机&&&&&&& public String R //引用&&&&&&& public CookieCollection C //cookies容器&&&&&&& public String PostD //请求的传给服务器的参数&&&&&&& public String M //请求方式常见的POST,GET&&&&&&& public String ContentT &&&&&&&&&& public String H //响应的html代码&&&&&&& public String AbsoluteU &&&&&&& public Bitmap I //如果请求的是图片,这里返回一个Bitmap对象&&&&&&& public Boolean IsI //是否为图片&&& }}
HttpRequest.cs //用来发起提交的
namespace NetHelper {&&& using S&&& using System.D&&& using System.IO;&&& using System.N&&& using System.T
&&& /// &summary&&&& /// Http请求封装类,包括 POST,GET请求&&& /// 幸福海&&& /// &/summary&&&& public class HttpRequest {&&&&&&& private CookieC&&&&&&& public CookieContainer Cookies {&&&&&&&&&&& get { return this. }&&&&&&&&&&& set { this.cookies = }&&&&&&& }&&&&&&& /// &summary&&&&&&&& /// Http请求&&&&&&& /// 幸福海&&&&&&& /// &/summary&&&&&&&& public HttpRequest() {&&&&&&&&&&& this.Cookies = new CookieContainer();&&&&&&& }&&&&&&& /// &summary&&&&&&&& /// 发送HTTP请求&&&&&&& /// &/summary&&&&&&&& /// ¶m name="Head"&HTTP头结构&/param&&&&&&&& /// &returns&&/returns&&&&&&&& public String Send(ref HttpHead Head) {&&&&&&&&&&& HttpWebResponse Response =&&&&&&&&&&& String val = "";&&&&&&&&&&& try {&&&&&&&&&&&&&&& HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(Head.Host);&&&&&&&&&&&&&&& Request.ProtocolVersion = new Version("1.1");&&&&&&&&&&&&&&& Request.Referer = Head.R&&&&&&&&&&&&&&& Request.Accept = "*/*";&&&&&&&&&&&&&&& Request.CookieContainer = this.C&&&&&&&&&&&&&&& Request.Timeout = 100000;&&&&&&&&&&&&&&& Request.Headers.Add("Accept-Language", "zh-CN");&&&&&&&&&&&&&&& Request.KeepAlive =&&&&&&&&&&&&&&& Request.UserAgent = "Mozilla/4.0 ( MSIE 8.0; Windows NT 6.1;.NET CLR 2.0.50727)";
&&&&&&&&&&&&&&& if (Head.Method.ToLower() == "post") {&&&&&&&&&&&&&&&&&&& Request.Method = "POST";&&&&&&&&&&&&&&&&&&& if (String.IsNullOrEmpty(Head.ContentType)) {&&&&&&&&&&&&&&&&&&&&&&& Request.ContentType = "application/x-www-form-urlencoded";&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&& else {&&&&&&&&&&&&&&&&&&&&&&& Request.ContentType = Head.ContentT&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&& if (Head.PostData != null && Head.PostData.Length & 0) {&&&&&&&&&&&&&&&&&&&&&&& Byte[] byteData = Encoding.Default.GetBytes(Head.PostData);&&&&&&&&&&&&&&&&&&&&&&& Request.ContentLength = byteData.L&&&&&&&&&&&&&&&&&&&&&&& Stream WriteStream = Request.GetRequestStream();&&&&&&&&&&&&&&&&&&&&&&& WriteStream.Write(byteData, 0, byteData.Length);&&&&&&&&&&&&&&&&&&&&&&& WriteStream.Close();&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& try {&&&&&&&&&&&&&&&&&&& Response = (HttpWebResponse)Request.GetResponse();&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& catch (WebException ex) {&&&&&&&&&&&&&&&&&&& if (ex.Response != null) {&&&&&&&&&&&&&&&&&&&&&&& Response = (HttpWebResponse)ex.R&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&& else {&&&&&&&&&&&&&&&&&&&&&&& return "网络异常";&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& foreach (Cookie cookie in Request.CookieContainer.GetCookies(Request.RequestUri)) {&&&&&&&&&&&&&&&&&&& this.Cookies.Add(cookie);&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& Stream dataStream = Response.GetResponseStream();&&&&&&&&&&&&&&& if (Head.IsImage) {&&&&&&&&&&&&&&&&&&& Bitmap img = new Bitmap(dataStream);&&&&&&&&&&&&&&&&&&& Head.Image =&&&&&&&&&&&&&&&&&&& return "";&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& else {&&&&&&&&&&&&&&&&&&& String encode = Response.CharacterS&&&&&&&&&&&&&&&&&&& if (encode == null) encode = "gb2312";&&&&&&&&&&&&&&&&&&& if (encode.ToLower() == "iso-8859-1") encode = "gb2312";&&&&&&&&&&&&&&&&&&& StreamReader reader = new StreamReader(dataStream, Encoding.GetEncoding(encode));&&&&&&&&&&&&&&&&&&& val = reader.ReadToEnd();&&&&&&&&&&&&&&&&&&& Head.AbsoluteUri = Response.ResponseUri.AbsoluteU&&&&&&&&&&&&&&&&&&& reader.Close();&&&&&&&&&&&&&&&&&&& dataStream.Close();&&&&&&&&&&&&&&&&&&& Response.Close();&&&&&&&&&&&&&&&&&&& Head.Html =&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&&&&&& catch {&&&&&&&&&&&&&&& return "未知错误";&&&&&&&&&&& }&&&&&&&&&&&&&&&&&& }&&& }}
这个类中最关键的是那个关联cookie,这里不详细说明,具体看代码,如果有不明白的地方,请提出来。
&&&&&&& //开始提交联通卡密,这就是那个按钮对应的事件&&&&&&& private void BtnOk_Click(object sender, EventArgs e) {&&&&&&&&&&& String strTel = tbTel.Text.Trim();&&&&&&&&&&& String strPass = tbPass.Text.Trim();&&&&&&&&&&& String Result = UnionCardPay(strTel, strPass);&&&&&&&&&&& lblMsg.Text = BuilderErrMsg(Result);& //显示充值信息&&&&&&& }
&& //重填输入框,重置按钮事件&&&&&&& private void BtnReset_Click(object sender, EventArgs e) {&&&&&&&&&&& tbTel.Text = tbPass.Text = String.E&&&&&&&&}
& //字符串中获取指定开始和结束的子串&&&&&&& private String GetValue(string str, string s, string e) {&&&&&&&&&&& Regex regex = new Regex("(?&=(" + s + "))[.\\s\\S]*?(?=(" + e + "))", RegexOptions.Multiline | RegexOptions.Singleline);&&&&&&&&&&& return regex.Match(str).V&&&&&&& }
&&&&&&& //对错误编码进行处理&&&&&&& private String BuilderErrMsg(String errCode) {&&&&&&&&&&& String val = "";&&&&&&&&&&& switch (errCode) {&&&&&&&&&&&&&&& case "001": val = "充值卡已使用";&&&&&&&&&&&&&&& case "002": val = "您输入的充值卡密码有误";&&&&&&&&&&&&&&& case "003": val = "您输入的交费充值号码不存在";&&&&&&&&&&&&&&& case "004": val = "请正确输入手机号码";&&&&&&&&&&&&&&& case "005": val = "验证码5次匹配不成功";&&&&&&&&&&&&&&& case "006": val = "充值卡已过期";&&&&&&&&&&&&&&& case "007": val = "充值失败";&&&&&&&&&&&&&&& case "008": val = "异常,或无法连接服务器";&&&&&&&&&&&&&&& case "888": val = "充值成功";&&&&&&&&&&& }&&&&&&&&&&&&&&&&&& }
&&&&&&& //联通卡密提交&&&&&&& String UnionCardPay(String tel, String pass) {&&&&&&&&&&& try {&&&&&&&&&&&&&&& String result = "";&&&&&&&&&&&&&&& NetHelper.HttpHead head = new NetHelper.HttpHead();&&&&&&&&&&&&&&& NetHelper.HttpRequest request = new NetHelper.HttpRequest();&&&&&&&&&&&&&&& request.Cookies = new System.Net.CookieContainer();
&&&&&&&&&&&&&&& //充值初始化页&&&&&&&&&&&&&&& head.Host = "";&&&&&&&&&&&&&&& head.Method = "GET";&&&&&&&&&&&&&&& request.Send(ref head);&&&&&&&&&&&&&&& result = head.H&&&&&&&&&&&&&&& String state = GetValue(result, "name=\"secstate.state\" value=\"", "\" id=\"secstate.state\"/&");
&&&&&&&&&&&&&&& //自动过验证码&&&&&&&&&&&&&&& Int16 index = 1;&&&&&&&&&&&&&&& while (1 == 1) {&&&&&&&&&&&&&&&&&&& head.Host = "=" + DateTime.Now.ToString("yyyyMMddhhmmss");&&&&&&&&&&&&&&&&&&& head.IsImage =&&&&&&&&&&&&&&&&&&& head.Method = "GET";&&&&&&&&&&&&&&&&&&& request.Send(ref head);&&&&&&&&&&&&&&&&&&& Bitmap img = head.I&&&&&&&&&&&&&&&&&&& CheckImage imgChk = new CheckImage();&&&&&&&&&&&&&&&&&&& String chk = imgChk.GetCheckCode(img);
&&&&&&&&&&&&&&&&&&& //提交充值号码和卡密&&&&&&&&&&&&&&&&&&& String para = "numbean.userNumBean.userSelNum=1&numbean.userNumBean.otherNum=" + tel + "&cardPwd=" + pass + "&verifyCode=" +&&&&&&&&&&&&&&&&&&& para += "&numbean.cityCodeBean.provinceId=&numbean.cityCodeBean.cityId=&numbean.cityCodeBean.cityCode=&numbean.userNumBean.telNum=";&&&&&&&&&&&&&&&&&&& para += "&secstate.state=" +&&&&&&&&&&&&&&&&&&& head.Host = "";&&&&&&&&&&&&&&&&&&& head.PostData =&&&&&&&&&&&&&&&&&&& head.IsImage =&&&&&&&&&&&&&&&&&&& head.Method = "POST";&&&&&&&&&&&&&&&&&&& head.Referer = "";&&&&&&&&&&&&&&&&&&& request.Send(ref head);&&&&&&&&&&&&&&&&&&& result = head.H&&&&&&&&&&&&&&&&&&& state = GetValue(result, "name=\"secstate.state\" value=\"", "\" id=\"secstate.state\"/&");&&&&&&&&&&&&&&&&&&& result = GetValue(result, "&div id='ecs_err_msg_div' class='ceng_jinshi' cssStyle='' align='left'&", "&/div&");//提交状态&&&&&&&&&&&&&&&&&&& //状态处理&&&&&&&&&&&&&&&&&&& if (result.Contains("验证码不正确")) { // 验证码匹配5次不正确。&&&&&&&&&&&&&&&&&&&&&&& if (index++ &= 5) {&&&&&&&&&&&&&&&&&&&&&&&&&&& return "005";&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&&&& else {&&&&&&&&&&&&&&&&&&&&&&&&&&& //重新跳转到验证码识别&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& if (result.Contains("输入的充值卡已充值")) { //尊敬的用户您好,您输入的充值卡已充值,无法再次使用,请更换充值卡重新操作&&&&&&&&&&&&&&&&&&& return "001";&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& if (result.Contains("您输入的充值卡密码有误")) { //尊敬的用户您好,您输入的充值卡密码有误,请重新输入。&&&&&&&&&&&&&&&&&&& return "002";&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& if (result.Contains("您输入的交费充值号码不存在")) { // 尊敬的用户您好,您输入的交费充值号码不存在,请重新输入。&&&&&&&&&&&&&&&&&&& return "003";&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& if (result.Contains("请正确输入手机号码")) { //请正确输入手机号码。&&&&&&&&&&&&&&&&&&& return "004";&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& if (result.Contains("过期")) { //充值卡已过期。&&&&&&&&&&&&&&&&&&& return "006";&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& //确认充值结果&&&&&&&&&&&&&&& head.Host = "";&&&&&&&&&&&&&&& head.Method = "POST";&&&&&&&&&&&&&&& head.PostData = "secstate.state=" +&&&&&&&&&&&&&&& head.Cookies = request.Cookies.GetCookies(new Uri(head.Host));&&&&&&&&&&&&&&& head.Referer = "";&&&&&&&&&&&&&&& request.Send(ref head);&&&&&&&&&&&&&&& result = head.H&&&&&&&&&&&&&&& if (!result.Contains("&td&成功&/td&")) { //最后一步没有完成,即充值失败&&&&&&&&&&&&&&&&&&& return "009";&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& return "888";&&&&&&&&&&& }&&&&&&&&&&& catch {&&&&&&&&&&&&&&& return "009";&&&&&&&&&&& }&&&&&&& }
全部代码就这些,这里主要是给大家整理思路,主要是通过C#向服务器提交数据
现把联通卡密提交的顺序说一下
1,当我们启动抓包工具,开始提交数据的时候,我们会看到,有几个参数提到了服务器端
这几个,名称看上去怪怪的,原因很简单,主是因为联通这个站是J***A来写到了,用了Bean,所有看上去名称就比较上
其实对我们来说无所谓
numbean.userNumBean.userSelNum 如果是给手机充值这个是1,固话小灵通,宽带就为2numbean.userNumBean.otherNum&& 手机号码cardPwd 卡密verifyCode 验证码,
下面四个我们可以不管他了numbean.cityCodeBean.provinceIdnumbean.cityCodeBean.cityIdnumbean.cityCodeBean.cityCodenumbean.userNumBean.telNum
这个参数非常重要,也就是一个隐藏域的东西,估计是一个加密字符串充,如果错了,就提交不上了。secstate.state
最后当我们点提交的时候,就可以得到相应的信息,假如你还要获取订单号,和充值的金额,你只对html源进行分析,截取就行了
OK,这个联通的卡密就写到这里,由于第一次写东西,没有什么思路,呵呵,想到哪就写到哪了,毕竟文学功底有限,希望以后写文章这方面的功能加强些,
如果大家对这个联通卡密自动提交还不是很清楚的话,可以随你给我发信息.
博客地址:
阅读(...) 评论()充值软件大全
很早的时候就听说过自动充值软件,功能相当强大,可以充值最基本的花费,也可以充值海量的游戏币,还有QQ币等。自动充值软件充值很方便,生活中可以省去很多体力活,想交水电煤费等。那么有哪些充值软件比较好用呢?下面,2345软件大全小编就为大家介绍几款比较靠谱的充值软件,既安全又方便,快来***吧。推荐:
推荐指数:
大小:88.4MB
推荐理由:支付宝HD是支付宝官方推出的集安全支付和生活应用为一体的手机支付软件, 通过安全支付、手机认证等综合保障体系, 让您尽享支付宝为您提供的淘宝交易付款、话费充值、水电煤缴费、收付款、账户管理等服务。
推荐理由:支付宝钱包内置风靡全国的平民理财神器“余额宝”,还有还信用卡、转账、充话 费、缴水电煤全部免费,有了钱包还能便宜打车、去便利店购物、售货机买饮料,更有众多银行和品牌商家的精品服务。你和1亿多钱包用户一起,好钱包,很安全,会赚钱,更懂生活。
推荐理由:超过3亿用户都在使用财付通:会支付,会生活。为生活提供更多便捷。
财付通手机客户端由腾讯出品,将钱包装进手机,将生活装进口袋。只要您有QQ号,就能登录使用。随时随地,动动手指,轻松完成生活中的支付。
推荐理由:易付宝钱包,是由苏宁云商打造的移动电子钱包!有了它,不跑银行、不排长队、不欠费!随时随地进行充值缴费、余额理财、订酒店、订机票、买彩票等等,方便又快捷!
推荐理由:支付宝9.0是支付宝十一年来最大的一次蜕变,除了继续内置风靡全国的“余额宝”,还信用卡、转账、充话费、缴水电煤全部免费,新支付宝还提供了以你为中心的餐饮、生活服务、理财保险、场景关系等一系列全新服务 。
推荐理由:该应用为支付宝快捷支付服务插件,无桌面图标。 快捷支付服务是一种安全、快捷的付款方式,只需关联您的银行卡,无需网银,付款时输入支付宝支付密码和手机校验码即可轻松完成付款。
推荐理由:应用简介
1)支持全国移动话费充值
2)支持全国移动话费充值
3)支持浙江地区电信话费充值
******:400-888-5898