架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 45|回复: 0
打印 上一主题 下一主题

[WinForm] C#登录Wordpress

[复制链接]
跳转到指定楼层
楼主
发表于 7 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
WordPress是使用PHP语言开发的博客平台,

使用c# 模拟http post请求,向Wordpress登录接口发送数据,然后进行登录。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Windows.Forms;

  8. namespace WindowsFormsApplication1
  9. {
  10.     class loginwp
  11.     {
  12.         public string PostData(string postURL, string postString, string encoding)
  13.         {
  14.             string strHTML = "";//用来保存获得的HTML代码
  15.             Uri URI = new Uri(postURL);
  16.             string sendString;
  17.             sendString = "POST {0} HTTP/1.1\r\n";
  18.             sendString += "Host: {1}\r\n";
  19.             sendString += "User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0\r\n";
  20.             sendString += "Content-Type:application/x-www-form-urlencoded\r\n";
  21.             sendString += "Content-Length:{2}\r\n";
  22.             sendString += "Connection:close\r\n";
  23.             sendString += "Cookie:wordpress_test_cookie=WP+Cookie+check\r\n\r\n";
  24.             sendString += "{3}\r\n";
  25.             sendString = string.Format(sendString, URI.PathAndQuery, URI.Host, postString.Length, postString);
  26.             Byte[] ByteGet = Encoding.GetEncoding(encoding).GetBytes(sendString);
  27.             IPAddress hostadd = Dns.GetHostEntry(URI.Host).AddressList[0];
  28.             IPEndPoint EPhost = new IPEndPoint(hostadd, 80);
  29.             Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  30.             s.Connect(EPhost);
  31.             if (!s.Connected)
  32.             {
  33.                 strHTML = "链接主机失败";
  34.             }
  35.             s.Send(ByteGet, ByteGet.Length, SocketFlags.None);
  36.             strHTML = Recv(s, Encoding.GetEncoding(encoding));
  37.             return strHTML;
  38.         }

  39.         public static String Recv(Socket sock, Encoding encode)
  40.         {
  41.             Byte[] buffer = new Byte[1024];
  42.             StringBuilder sb = new StringBuilder();

  43.             Thread.Sleep(50);//根据页面响应时间进行微调        
  44.             Int32 len = sock.Receive(buffer);
  45.             sb.Append(encode.GetString(buffer, 0, len));

  46.             while (sock.Available > 0)
  47.             {
  48.                 Thread.Sleep(300);//也可以视情况微调           
  49.                 Array.Clear(buffer, 0, buffer.Length);
  50.                 len = sock.Receive(buffer);
  51.                 sb.Append(encode.GetString(buffer, 0, len));
  52.                 string ss = encode.GetString(buffer, 0, len);
  53.             }
  54.             sock.Close();
  55.             return sb.ToString();
  56.         }

  57.         /// <summary>
  58.         /// 从返回的源代码中提取cookies 以及301或302跳转
  59.         /// </summary>
  60.         /// <param name="s"></param>
  61.         /// <param name="locatio{过滤}n"></param>
  62.         /// <returns></returns>
  63.         public string GetCookies(string html, out string locatio{过滤}n)
  64.         {
  65.             StringBuilder sbCookies = new StringBuilder();
  66.             locatio{过滤}n = string.Empty;
  67.             string[] arr = html.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
  68.             foreach (string str in arr)
  69.             {
  70.                 if (str.StartsWith("Set-Cookie: "))
  71.                 {
  72.                     int intStart = str.IndexOf(";");
  73.                     string strCookie = str.Substring(12, intStart - 11);
  74.                     sbCookies.Append(strCookie);
  75.                 }
  76.                 if (str.StartsWith("locatio{过滤}n:"))
  77.                 {
  78.                     locatio{过滤}n = str.Substring(10);
  79.                 }
  80.             }
  81.             return sbCookies.ToString();
  82.         }

  83.         /// <summary>
  84.         /// 带上cookies 获取需要登录验证的页面
  85.         /// </summary>
  86.         /// <param name="url">请求的URL</param>
  87.         /// <param name="cookies">cookies字符串</param>
  88.         /// <param name="encoding">页面编码</param>
  89.         /// <returns></returns>
  90.         public string GetPage(string url, string cookies, string encoding)
  91.         {
  92.             Uri URI = new Uri(url);
  93.             string strHTML = string.Empty;//用来保存获得的HTML代码
  94.             IPHostEntry gist = Dns.GetHostEntry(URI.Host);//获得当前url的ip地址
  95.             IPAddress ip = gist.AddressList[0];//提取IP地址
  96.             IPEndPoint ipEnd = new IPEndPoint(ip, 80);//封装IP地址和端口
  97.             Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化Stock
  98.             try
  99.             {
  100.                 socket.Connect(ipEnd);
  101.             }//自动循环捕捉连接
  102.             catch
  103.             { }
  104.             string sendString = "GET " + URI.PathAndQuery + " HTTP/1.1\r\n";
  105.             sendString += "Connection:close\r\n";
  106.             sendString += "Content-Type: application/x-www-form-urlencoded\r\n";
  107.             sendString += "Host:" + URI.Host + "\r\n";
  108.             if (!string.IsNullOrEmpty(cookies))
  109.                 sendString += "Cookie:" + cookies + "\r\n\r\n";
  110.             byte[] ms = UTF8Encoding.GetEncoding(encoding).GetBytes(sendString);//将头部转换成byte形式
  111.             socket.Send(ms);//发送
  112.             int recv = -1;//定义接受数据长度
  113.             byte[] data = new byte[1024];//用来保存接收数据
  114.             do
  115.             {
  116.                 recv = socket.Receive(data);
  117.                 strHTML += Encoding.GetEncoding(encoding).GetString(data, 0, recv);
  118.             } while (recv != 0);
  119.             return strHTML;
  120.         }
  121.     }
  122. }
复制代码


源码下载:
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 1MB +1 贡献 +1 收起 理由
admin + 1 + 1 很给力!

查看全部评分





上一篇:discuz禁止台湾ip地址注册
下一篇:mysql cpu 100% 居高不下解决方案
帖子永久地址: 

架构师_程序员 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与架构师_程序员享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和架构师_程序员的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、架构师_程序员管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

关闭

站点通知上一条 /1 下一条

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2018-10-17 06:37

Powered by Discuz! X3.4

© 2001-2014 Comsenz Inc.

快速回复 返回顶部 返回列表