知识点
相关文章
更多最近更新
更多.NET微信模拟登录及{base_resp:{ret:-4,err_msg:nvalid referrer}}的解决办法
2019-03-02 00:53|来源: 网路
12年的时候写了些关于微信开发的内容,当时看好这个东西,可惜当时腾讯开放的权限太少,之后的一年多时间没有太关注了。
现在又要重新开始微信开发的阵容了,微信只是个入口,微网站才是趋势。
我是个水货,所以写的都是比较入门的,给初学者点启发用的。
这里有3个文件,一个页面展示(不贴代码了,就两个文本框和提交按钮)和后台代码,一个方法类,一个实体类
后台代码
protected void btnConfirm_Click(object sender, EventArgs e) { string name = txtName.Text; string pass = txtPass.Text; if (WeiXinLogin.ExecLogin(name, pass)) { Response.Write("登陆成功"); Response.Redirect("SendMessage.aspx"); } else { Response.Write("登陆失败"); } }
方法类
public static bool ExecLogin(string name, string pass) { bool result = false; string password = GetMd5Str32(pass).ToUpper(); string padata = "username=" + name + "&pwd=" + password + "&imgcode=&f=json"; string url = "https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN";//请求登录的URL try { CookieContainer cc = new CookieContainer();//接收缓存 byte[] byteArray = Encoding.UTF8.GetBytes(padata); // 转化 HttpWebRequest webRequest2 = (HttpWebRequest)WebRequest.Create(url); //新建一个WebRequest对象用来请求或者响应url webRequest2.CookieContainer = cc; //保存cookie webRequest2.Method = "POST"; //请求方式是POST webRequest2.ContentType = "application/x-www-form-urlencoded"; //请求的内容格式为application/x-www-form-urlencoded webRequest2.Referer = "https://mp.weixin.qq.com/";//request的referer地址,网络上的版本因为这句没写所以会出现invalid referrer webRequest2.ContentLength = byteArray.Length; Stream newStream = webRequest2.GetRequestStream(); //返回用于将数据写入 Internet 资源的 Stream。 // Send the data. newStream.Write(byteArray, 0, byteArray.Length); //写入参数 newStream.Close(); HttpWebResponse response2 = (HttpWebResponse)webRequest2.GetResponse(); StreamReader sr2 = new StreamReader(response2.GetResponseStream(), Encoding.Default); string text2 = sr2.ReadToEnd(); HttpContext.Current.Response.Write("text2:" + text2 + "<br/>"); //此处用到了newtonsoft来序列化 WeiXinRetInfo retinfo = Newtonsoft.Json.JsonConvert.DeserializeObject<WeiXinRetInfo>(text2); string token = string.Empty; if (retinfo.redirect_url != null && retinfo.redirect_url.Length > 0) { token = retinfo.redirect_url.Split(new char[] { '&' })[2].Split(new char[] { '=' })[1].ToString();//取得令牌 LoginInfo.LoginCookie = cc; LoginInfo.CreateDate = DateTime.Now; LoginInfo.Token = token; result = true; } } catch (Exception ex) { HttpContext.Current.Response.Write("ex:" + ex.ToString()); //throw new Exception(ex.StackTrace); } return result; }
实体类
public class WeiXinRetInfo//网络上是另一个版本,微信更新后换结构了 { public base_resp base_resp { get; set; } public string redirect_url { get; set; } } public class base_resp { public string ret { get; set; } public string err_msg { get; set; } }
这样就完成了微信的模拟登录~ 接下来的其他步骤如获取登陆用户信息,群发信息之类的如果遇到问题再记录,没问题的话不更新了。
参考文章
http://bbs.csdn.net/topics/390670160
http://www.cnblogs.com/dyllove98/p/3165814.html
转自:http://www.cnblogs.com/TivonStone/p/3700922
相关问答
更多-
跟代码啊。。。openid是一直存在的,应该是你哪一步写的不对,值没带过去。。。
-
centos5.5安装mysql5.0.22,make错误,求详细解决办法。[2022-01-12]
用YUM仓库安装吧 -
请问Connection reset by peer的解决办法 [恳请帮忙解决!][2022-11-28]
firefox浏览器对于某些网站是会有问题的,毕竟现在用IE的人还是太多了...有什么问题可以上www.firefox.net.cn看看... 还有,不用FIREFOX上BLOG就行啦! -
nginx 404怎么解决办法[2024-04-21]
404表示资源不存在 一般是URL错误或访问的资源已经被删除或移动 所以检查一下是否访问的URL有问题,并确定没有被删除或移动位置 -
关节胀痛有什么解决办法?[2022-01-31]
可以试一下NatureMade的TripleFlex三倍强效关节宝,之前我爸爸关节炎他不愿意吃药我就给他买了这个,现在他已经好多了,不过如果很严重的话还是建议你去医院哦~ -
查了下,先执行下面命令试试: conda update conda
-
ddos攻击,解决办法??[2023-06-23]
(1)检查攻击来源,通常黑客会通过很多假IP地址发起攻击,此时,用户若能够分辨出哪些是真IP哪些是假IP地址,然后了解这些IP来自哪些网段,再找网网管理员将这些机器关闭,从而在第一时间消除攻击。如果发现这些IP地址是来自外面的而不是公司内部的IP的话,可以采取临时过滤的方法,将这些IP地址在服务器或路由器上过滤掉。 (2)找出攻击者所经过的路由,把攻击屏蔽掉。若黑客从某些端口发动攻击,用户可把这些端口屏蔽掉,以阻止入侵。不过此方法对于公司网络出口只有一个,而又遭受到来自外部的DdoS攻击时不太奏效,毕竟 ... -
在访问ORACLE EBS的时候,oajinit.exe安装问题解决办法,[2021-09-03]
ORACLE EBS对其他浏览器的支持很差。 IE的话不行就卸掉重新装个看看。 -
Linux编程中popen函数无法完成类似telnet中执行cd命令的操作效果,有何解决办法?[2021-11-30]
用chdir代替cd 具体用法查下chdir