C#模拟登录主动推送信息
请求https接口时注意设置 ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
/// <summary>
/// 获取token,保存cookie
/// </summary>
/// <param name="username"></param>
/// <param name="pwd"></param>
/// <param name="objCookieContainer"></param>
/// <returns></returns>
public string Login(string username, string pwd, ref CookieContainer objCookieContainer)
{
string uriStr = "https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN";
string pwdMd5 = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "md5");
Dictionary<string, string> postData = new Dictionary<string, string>();
postData.Add("username", username);// 15
postData.Add("pwd", pwdMd5);// 15
postData.Add("imgcode", "");
postData.Add("f", "json");
string jsonArray = RequestUrl(uriStr, postData, ref objCookieContainer);
string token = Regex.Match(jsonArray, @"([\d]{7,11})", RegexOptions.IgnoreCase).Value;
return token;
}
/// <summary>
/// 获取Fakeid
/// </summary>
/// <param name="username"></param>
/// <param name="pwd"></param>
/// <param name="objCookieContainer"></param>
/// <returns></returns>
public string GetFakeid(string token, ref CookieContainer objCookieContainer)
{
Dictionary<string, string> postData = new Dictionary<string, string>();
string urirStr = "https://mp.weixin.qq.com/cgi-bin/contactmanagepage?t=wxm-friend&token=" + token + "&lang=zh_CN&pagesize=10&pageidx=0&type=0&groupid=0";
string jsone = RequestUrl(urirStr, postData, ref objCookieContainer);
string fakeidlist = Regex.Match(jsone, "<script id=\"json-friendList\" type=\"json/text\">([\\s\\S]*?)</script>", RegexOptions.IgnoreCase).Value;
MatchCollection mc = Regex.Matches(fakeidlist, "([\\d]{7,11})");
string[] fakeid = new string[mc.Count];
for (int i = 0; i < mc.Count; i++)
{
fakeid[i] = mc[i].Value;
}
return fakeid[0];
}
/// <summary>
/// 获取粉丝的相关信息
/// </summary>
/// <param name="Fakeid"></param>
/// <param name="objCookieContainer"></param>
/// <returns></returns>
public string[] GetUserInfoByFakeid(string token, string Fakeid, ref CookieContainer objCookieContainer)
{
Dictionary<string, string> postData = new Dictionary<string, string>();
postData.Add("token", token);
postData.Add("ajax", "1");
string strUrl = "https://mp.weixin.qq.com/cgi-bin/getcontactinfo?t=ajax-getcontactinfo&lang=zh_CN&fakeid=" + Fakeid;
string fakeid = RequestUrl(strUrl, postData, ref objCookieContainer);
//string fakeid = Regex.Match(jsonArray, "<script id=\"json-friendList\" type=\"json/text\">([\\s\\S]*?)</script>", RegexOptions.IgnoreCase).Value;
JObject jo = JObject.Parse(fakeid);
return jo.Properties().Select(item => item.Value.ToString()).ToArray();
}
public void SendMessage(string token, string toFakeid, string content, ref CookieContainer objCookieContainer)
{
string strUrl = "https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN";
Dictionary<string, string> postData = new Dictionary<string, string>();
postData.Add("type", "1");
postData.Add("content", content);
postData.Add("error", "false");
postData.Add("tofakeid", toFakeid);
postData.Add("token", token);
postData.Add("ajax", "1");
RequestUrl(strUrl, postData, ref objCookieContainer);
}
/// <summary>
/// post模拟登录
/// </summary>
/// <param name="strUrl"></param>
/// <param name="postData"></param>
/// <param name="objCookieContainer"></param>
/// <returns></returns>
public static string RequestUrl(string strUrl, Dictionary<string, string> postData, ref CookieContainer objCookieContainer)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl);
req.Method = "POST";
req.KeepAlive = true;
req.ContentType = " application/x-www-form-urlencoded; charset=UTF-8";
req.Referer = strUrl.Remove(strUrl.LastIndexOf("/"));//,,.Substring(;
// req.Timeout = 10000;
if (objCookieContainer == null)
objCookieContainer = new CookieContainer();
req.CookieContainer = objCookieContainer;
req.ContentLength = 0;
System.Text.RegularExpressions.Regex _reg = new System.Text.RegularExpressions.Regex("^https://",
System.Text.RegularExpressions.RegexOptions.IgnoreCase);
if (_reg.IsMatch(strUrl))
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
ServicePointManager.ServerCertificateValidationCallback =new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
}
if (postData != null && postData.Count > 0)
{
StringBuilder objEncodedPostDatas = new StringBuilder();
foreach (KeyValuePair<string, string> kv in postData)
{
objEncodedPostDatas.Append(HttpUtility.UrlEncode(kv.Key));
objEncodedPostDatas.Append("=");
objEncodedPostDatas.Append(HttpUtility.UrlEncode(kv.Value));
objEncodedPostDatas.Append("&");
}
byte[] byteData = Encoding.UTF8.GetBytes(objEncodedPostDatas.ToString().TrimEnd('&'));
req.ContentLength = byteData.Length;
Stream reqStream = req.GetRequestStream();
reqStream.Write(byteData, 0, byteData.Length);
req.CookieContainer.GetCookies(req.RequestUri);
// reqStream.Close();
}
string strResponse = "";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
objCookieContainer = req.CookieContainer;
Stream resStream = res.GetResponseStream();
StreamReader sr = new StreamReader(resStream, Encoding.UTF8);//.UTF8))
strResponse = sr.ReadToEnd();
// res.Close();
return strResponse;
}
public static bool CheckValidationResult(object sender,
System.Security.Cryptography.X509Certificates.X509Certificate certificate,
System.Security.Cryptography.X509Certificates.X509Chain chain,
System.Net.Security.SslPolicyErrors errors)
{
//直接确认,不然打不开
return true;
}
浙公网安备 33010602011771号