自动充值平台开发进程之联通卡密一最终实现 |
您所在的位置:网站首页 › 联通卡密充值电话 › 自动充值平台开发进程之联通卡密一最终实现 |
最近一直忙于移动,联通,电信充值平台开发,需要做的软件也在特别多,有13800138000,空中充值,移动手机支付,联通卡密验证与提交,和三方接口的对接, 其中三方接口应该是最简单的,三方对口,如易宝,欧飞等,其中13800138000是通过猫池来进行语言拨号,来完成充值,我们不像别的大公司有专门的接口,移动手机支付和联通卡密,我们都做的是辅助软件来完成.
现把思路整理一下做个记录,方便日后,也给需要这方面的朋友一个参考吧
在开发之前,列一下我所用的到工个 开发工具和数据库不用多说 vs2010+sql2005, 还有抓包工具,HttpAnalyzerFullV5和WSExplorer,这两个工具的破解版网上一搜就能搜出一把把。
联通卡密辅助软件开发的几个重点 1.验证码,大部分人在验证码这块会卡住,验证码没过自动提交根本就谈不上,过验证码对于没有接触这块的人来说需要时间一研究,网上也有叫卖的 2.抓包,只有抓到数据包后,合理分的分析出有用的数据,才能去自动提交我们想要的数据。 我抓到的数据包如下图 HttpAnalyzerFullV5这个工具还是具好用的,有浏览器插件版和独立版 下面为独立版 插件版 开始抓包 在上面这个图中就是我用抓包工具抓到的数据,里面可以清楚的看到,需要post过来的参数名和对应的值,以及一起提交的cookie等相应的数据 充值的手机号,充值的卡密,和验证码都在里面了呵呵, 今天就写到这里,下次再写
前两篇已把相应的准备工作和功能说明列了一下,今天就把详细的实现写一下,以后的将把13800138000的语音拨号系统,和手机短信群发的的实现也发上。
开始这次的内容。 首先就是需要用到模拟提交的两个类 HttpHead.cs 这个类(其实是结构)它的主要功能就是封装了Http请求的一个头信息 using System; using System.Net; using System.Drawing; namespace NetHelper { /// /// Http头信息设置 /// public struct HttpHead { public String Host; //主机 public String Referer; //引用 public CookieCollection Cookies; //cookies容器 public String PostData; //请求的传给服务器的参数 public String Method; //请求方式常见的POST,GET public String ContentType; public String Html; //响应的html代码 public String AbsoluteUri; public Bitmap Image; //如果请求的是图片,这里返回一个Bitmap对象 public Boolean IsImage; //是否为图片 } } HttpRequest.cs //用来发起提交的 namespace NetHelper { using System; using System.Drawing; using System.IO; using System.Net; using System.Text; /// /// Http请求封装类,包括 POST,GET请求 /// 幸福海 /// public class HttpRequest { private CookieContainer cookies; public CookieContainer Cookies { get { return this.cookies; } set { this.cookies = value; } } /// /// Http请求 /// 幸福海 /// public HttpRequest() { this.Cookies = new CookieContainer(); } /// /// 发送HTTP请求 /// /// HTTP头结构 /// public String Send(ref HttpHead Head) { HttpWebResponse Response = null; String val = ""; try { HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(Head.Host); Request.ProtocolVersion = new Version("1.1"); Request.Referer = Head.Referer; Request.Accept = "*/*"; Request.CookieContainer = this.Cookies; Request.Timeout = 100000; Request.Headers.Add("Accept-Language", "zh-CN"); Request.KeepAlive = true; Request.UserAgent = "Mozilla/4.0 (compatible; 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.ContentType; } if (Head.PostData != null && Head.PostData.Length > 0) { Byte[] byteData = Encoding.Default.GetBytes(Head.PostData); Request.ContentLength = byteData.Length; 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.Response; } 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 = img; return ""; } else { String encode = Response.CharacterSet; 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.AbsoluteUri; reader.Close(); dataStream.Close(); Response.Close(); Head.Html = val; } } catch { return "未知错误"; } return val; } } } 这个类中最关键的是那个关联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.Empty; }
//字符串中获取指定开始和结束的子串 private String GetValue(string str, string s, string e) { Regex regex = new Regex("(? |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |