程序员便利贴
.NET实现Wap飞信协议
分类: C#/.Net

发现有人用php实现了wap飞信的协议,不看不知道,一看吓一跳,协议非常简单,总共代码也不超过100行。
我花了一小段时间,将那php的代码翻译成了C#的,测试了一下,还挺好用的,速度也挺快的。
下面是具体的代码实现,看看非常简单,占内存和CPU肯定也会非常的少。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Web;
using System.Text.RegularExpressions;

namespace Fetion
{
    public class WapFetion
    {
        private static string server = "http://f.10086.cn";
        private string mobile;
        private string password;
        private CookieContainer cookies = new CookieContainer();

        ///

        /// 构造函数
        /// 

        ///
手机号码
        ///
密码
        public WapFetion(string mobile, string password)
        {
            this.mobile = mobile;
            this.password = password.ToUrlEncode();
        }

        protected string PostWithCookie(string uri, string data)
        {
            using (HttpWebClient hwc = new HttpWebClient(cookies))
            {
                hwc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                return Encoding.UTF8.GetString(hwc.UploadData(uri, Encoding.UTF8.GetBytes(data)));
            }
        }

        protected string GetUid(string mobile)
        {
            string uri = server + "/im/index/searchOtherInfoList.action";
            string data = "searchText=" + mobile;

            string result = PostWithCookie(uri, data);
            Match mc = Regex.Match(result, @"toinputMsg\.action\?touserid=(\d+)");
            if (mc.Success)
            {
                return mc.Result("$1");
            }
            return null;
        }

        protected bool ToUid(string uid, string message)
        {
            string uri = server + "/im/chat/sendMsg.action?touserid=" + uid;
            string data = "msg=" + message.ToUrlEncode();
            string result = PostWithCookie(uri, data);
            return result != null && result.Contains("发送消息成功!");
        }

        protected bool ToMyself(string message)
        {
            string uri = server + "/im/user/sendMsgToMyselfs.action";
            string data = "msg=" + message.ToUrlEncode();
            string result = PostWithCookie(uri, data);
            return  result != null && result.Contains("短信发送成功!");
        }

        ///

        /// 登陆
        /// 

        /// 
        public string Login()
        {
            string uri = server + "/im/login/inputpasssubmit1.action";
            return PostWithCookie(uri, string.Format("m={0}&pass={1}&loginstatus=1", mobile, password));
        }

        ///

        /// 注销
        /// 

        /// 
        public string Logout()
        {
            string uri = server + "/im/index/logoutsubmit.action";
            return PostWithCookie(uri, "");
        }

        ///

        /// 通过手机号,给自己会好友发送消息
        /// 

        ///
手机号
        ///
消息
        /// 
        public bool Send(string mobile, string message)
        {
            if (string.IsNullOrWhiteSpace(message))
            {
                return false;
            }

            if (mobile == this.mobile)
            {
                return ToMyself(message);
            }
            else
            {
                string uid = GetUid(mobile);
                if (uid == null)
                {
                    return false;
                }
                return ToUid(uid, message);
            }
        }
    }
}
Tags:, ,

发表评论