摘要: 前言,现在这世道写篇帖子没个前言真不好意思发出来。本贴的主要内容来自于本人在之前项目中所开发的一个小功能,用于OA中的即时通讯。由于当时走的太急,忘记把代码拿出来。想想这已经是大半年前的事情了,时间过了这么久,在当时最新的SignalR2.0.1到现在已经变成了2.2。昨天晚上特地熬了个夜,重新又把... 阅读全文
posted @ 2015-09-08 18:41 Kovin 阅读(4106) 评论(27) 推荐(18) 编辑
摘要: 继上次C#制作高仿360安全卫士窗体发布之后响应还不错,我的博客放肆雷特也来了不少的新朋友,在这里先谢谢大家的支持!我自己也反复看了一下觉得对不起大家,写的非常乱而且很少文字介绍。在这里先说明一下,我是一个纯粹想搞技术的,文笔较差。我也想锻炼自己所以才会慢慢的将自己的所学分享出来。一来可以锻炼自己的文笔,二来可以分享知识留给像我一样喜欢这些东西的朋友。所以以后如果缺少介绍和说明,请大家多多补充指正,相互提高。下面进入主题。 上一篇主要讲的如何绘制一个按钮,那么今天讲解如何绘制窗体。之前也说过,先制作按钮的作用是可以将按钮用到窗体上面那些系统按钮如最大化、最小化、关闭、还原等。首先我们对按钮的不 阅读全文
posted @ 2013-08-06 12:22 Kovin 阅读(8214) 评论(34) 推荐(8) 编辑
摘要: 开始写这一系列博客之前先要向大家说声抱歉,放肆雷特建立很久却很少有更新。当然博客人气也不旺,大部分都是看的人多评论收藏的人少。一直想要改变这种状态,正好赶上了最近工作上做了一个高仿360安全卫士窗体。所以将开发历程分享出来,一来希望能和大家交流共同学习成长;二来希望自己的放肆雷特能有人光顾。这一系列的文章所用到的技术首先要感谢苏飞大哥,我也是在很早以前看了他的QQ皮肤制作文章之后得到的灵感和一些相关知识。在这里帮他的C#论坛打个广告,里面有不少比较有用的资料。苏飞大哥也是很用心的打理这个论坛,论坛地址http://www.sufeinet.com/。说了这么多也该进入主题了,首先为了让大家有兴 阅读全文
posted @ 2013-07-04 19:30 Kovin 阅读(8373) 评论(27) 推荐(13) 编辑

就在昨晚,在本屌丝刚刚发布屌丝与女神的回忆史《C#外挂QQ找茬辅助源码,早期开发》后,在苏飞大哥的技术讨论群有个群友提出一个问题。使用http协议模拟工具可以登录成功Wordpress但是自己写代码死活登陆不上。本人玩Wordpress已经很多年了,在很多年前还没有女神的时候就开始有开发Wordpress客户端的冲动。最终都不了了之。今天群友提出的问题让我重拾以前的那份冲动….说多了,言归正传
本屌最开始也是使用苏飞大哥写的Httphelper类。也是死活登陆不上,取不到登陆之后的Cookie值。最后就在想,为什么Fiddler里面看到的报文跟我发过去的都差不多而不行呢。可能是在访问的时候某些参数不正确吧,那我把发送过去的报文做成一模一样的应该没有问题吧。所以下面用到了Socket访问80端口的形式发送报文..(下载地址在最后)

使用Socket方式发送报文以及提取Cookie并访问网站的代码:

 

  1 class loginwp
  2 {
  3     public string PostData(string postURL, string postString, string encoding)
  4     {
  5         string strHTML = "";//用来保存获得的HTML代码
  6         Uri URI = new Uri(postURL);
  7         string sendString;
  8         sendString = "POST {0} HTTP/1.1\r\n";
  9         sendString += "Host: {1}\r\n";
 10         sendString += "User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0\r\n";
 11         sendString += "Content-Type:application/x-www-form-urlencoded\r\n";
 12         sendString += "Content-Length:{2}\r\n";
 13         sendString += "Connection:close\r\n";
 14         sendString += "Cookie:wordpress_test_cookie=WP+Cookie+check\r\n\r\n";
 15         sendString += "{3}\r\n";
 16         sendString = string.Format(sendString, URI.PathAndQuery, URI.Host, postString.Length, postString);
 17         Byte[] ByteGet = Encoding.GetEncoding(encoding).GetBytes(sendString);
 18         IPAddress hostadd = Dns.GetHostEntry(URI.Host).AddressList[0];
 19         IPEndPoint EPhost = new IPEndPoint(hostadd, 80);
 20         Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 21         s.Connect(EPhost);
 22         if (!s.Connected)
 23         {
 24             strHTML = "链接主机失败";
 25         }
 26         s.Send(ByteGet, ByteGet.Length, SocketFlags.None);
 27         strHTML = Recv(s, Encoding.GetEncoding(encoding));
 28         return strHTML;
 29     }
 30 
 31     public static String Recv(Socket sock, Encoding encode)
 32     {
 33         Byte[] buffer = new Byte[1024];
 34         StringBuilder sb = new StringBuilder();
 35 
 36         Thread.Sleep(50);//根据页面响应时间进行微调        
 37         Int32 len = sock.Receive(buffer);
 38         sb.Append(encode.GetString(buffer, 0, len));
 39 
 40         while (sock.Available > 0)
 41         {
 42             Thread.Sleep(300);//也可以视情况微调           
 43             Array.Clear(buffer, 0, buffer.Length);
 44             len = sock.Receive(buffer);
 45             sb.Append(encode.GetString(buffer, 0, len));
 46             string ss = encode.GetString(buffer, 0, len);
 47         }
 48         sock.Close();
 49         return sb.ToString();
 50     }
 51 
 52     /// <summary>
 53     /// 从返回的源代码中提取cookies 以及301或302跳转
 54     /// </summary>
 55     /// <param name="s"></param>
 56     /// <param name="location"></param>
 57     /// <returns></returns>
 58     public string GetCookies(string html, out string location)
 59     {
 60         StringBuilder sbCookies = new StringBuilder();
 61         location = string.Empty;
 62         string[] arr = html.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
 63         foreach (string str in arr)
 64         {
 65             if (str.StartsWith("Set-Cookie: "))
 66             {
 67                 int intStart = str.IndexOf(";");
 68                 string strCookie = str.Substring(12, intStart - 11);
 69                 sbCookies.Append(strCookie);
 70             }
 71             if (str.StartsWith("Location:"))
 72             {
 73                 location = str.Substring(10);
 74             }
 75         }
 76         return sbCookies.ToString();
 77     }
 78 
 79     /// <summary>
 80     /// 带上cookies 获取需要登录验证的页面
 81     /// </summary>
 82     /// <param name="url">请求的URL</param>
 83     /// <param name="cookies">cookies字符串</param>
 84     /// <param name="encoding">页面编码</param>
 85     /// <returns></returns>
 86     public string GetPage(string url, string cookies, string encoding)
 87     {
 88         Uri URI = new Uri(url);
 89         string strHTML = string.Empty;//用来保存获得的HTML代码
 90         IPHostEntry gist = Dns.GetHostEntry(URI.Host);//获得当前url的ip地址
 91         IPAddress ip = gist.AddressList[0];//提取IP地址
 92         IPEndPoint ipEnd = new IPEndPoint(ip, 80);//封装IP地址和端口
 93         Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化Stock
 94         try
 95         {
 96             socket.Connect(ipEnd);
 97         }//自动循环捕捉连接
 98         catch
 99         { }
100         string sendString = "GET " + URI.PathAndQuery + " HTTP/1.1\r\n";
101         sendString += "Connection:close\r\n";
102         sendString += "Content-Type: application/x-www-form-urlencoded\r\n";
103         sendString += "Host:" + URI.Host + "\r\n";
104         if (!string.IsNullOrEmpty(cookies))
105             sendString += "Cookie:" + cookies + "\r\n\r\n";
106         byte[] ms = UTF8Encoding.GetEncoding(encoding).GetBytes(sendString);//将头部转换成byte形式
107         socket.Send(ms);//发送
108         int recv = -1;//定义接受数据长度
109         byte[] data = new byte[1024];//用来保存接收数据
110         do
111         {
112             recv = socket.Receive(data);
113             strHTML += Encoding.GetEncoding(encoding).GetString(data, 0, recv);
114         } while (recv != 0);
115         return strHTML;
116     }
117 }

最后放上Demo:C#使用Socket登陆Wordpress.zip

本文来自放肆雷特 | 胖子的技术博客 欢迎关注胖子的新浪博客@大胖子蜀黍

posted @ 2014-01-24 12:55 Kovin 阅读(1796) 评论(0) 推荐(1) 编辑
摘要: 这是一款几年前开发的工具,当年作为一民IT纯屌,为了当年自己心目中的一位女神熬夜开发完成。女神使用后找茬等级瞬间从眼明手快升级为三只眼。。。每次看到这个就会想起那段屌丝与女神的回忆。今天特地把代码更新了一下,支持最新版的《大家来找茬》。下面上运行的截图,源码在本文最后:(对不起了,与我对战的那位玩家)这个工具的主要运行流程很简单:游戏截图-》比较图片-》标记图片不同点 记得当时处理程序截图和比较图片的时候比较麻烦,下面是截图的处理类ScreenCapture: 1 /// 2 /// 提供全屏和指定窗口的截图 以及保存为文件的类 3 /// 4 public cl... 阅读全文
posted @ 2014-01-23 21:09 Kovin 阅读(7266) 评论(59) 推荐(32) 编辑
摘要: 很久没有弄过协议相关的东西了,这个工具早在博客园闪存出来的时候就已经开发出来了。本来以为博客园闪存会比较火,所以一直珍藏着。。时间一长也没见博客园闪存有多热闹。所以这个工具也渐渐的淡忘了。今天翻自己电脑的时候看到这个工具了,已经登陆不了。所以今天修改了一下又继续恢复使用。按照惯例先上界面:这次这个工具没有什么特别的地方。发闪的地方与其他的协议有点不同需要修改一下ContentType为“application/json; charset=utf-8”才能发送成功。因为客户端提交过去的是一段json内容。发闪代码: 1 /// 2 /// 发送闪 3 /// 4 /// 内容 5 /// 是.. 阅读全文
posted @ 2013-12-31 12:49 Kovin 阅读(2798) 评论(9) 推荐(3) 编辑
摘要: 项目越来越紧,我也乐此不疲。自从上次C#制作高仿360安全卫士窗体(三)出来之后,就开始有一些人在说为什么还在坚持写这么落后的东西。我想说的是,我是从事企业信息化工作的,所有程序都只对内部使用。所以只要能满足需求就可以,比较高端先进的技术也没有时间去学习研究。OK继续上次的内容。上次说到制作文本框,今天要写的是怎么实现水晶按钮的制作。下面是效果图:下面是这个按钮所需要的图片素材,该素材也提取自360安全卫士。我自己做了一点点小的修改(另存为图片就可以使用):一、嵌入资源 将以上素材另存为,将图片保存在解决方案中Images目录下的ButtonImages文件夹中,并设置图片属性中生成操作选择为 阅读全文
posted @ 2013-10-18 14:09 Kovin 阅读(5261) 评论(11) 推荐(12) 编辑
摘要: 距上篇C#制作高仿360安全卫士窗体(二)也将近一个多月了,这个月事情还是像往常一样的多。不多我也乐在其中,毕竟我做的是我喜欢做的东西。今天特地抽空把怎么制作文本框写一下。同时也希望有爱好这些玩意的同仁和我进行交流... 文本框的开发比起按钮开发还是有一点不同,因为我这里主要是给文本框做美化,所以不需要完完全全的进行自己开发。只是重写它的某些事件,然后展现不同的效果。下面是运行后的效果。这个文本框实现了多行以及鼠标进入移出等事件的效果,那么开发这个素材只有一个也是从之前360皮肤包里面提取出来进行修改的:一、嵌入资源将以上素材另存为,在解决方案中Images目录里面建立一个TextBoxIma 阅读全文
posted @ 2013-09-11 16:30 Kovin 阅读(6213) 评论(19) 推荐(7) 编辑
主题色彩
点击右上角即可分享
微信分享提示