http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 5910|回复: 5

[其他] 登录微信公众平台,可以登录,之后就不能操作了

[复制链接]
发表于 2014-2-15 15:57:02 | 显示全部楼层 |阅读模式
做一个登录微信公众平台的程序
第一步登录已经做好,返回需要跳转的URL跟cookies,
第二部我拿这个这个URL跟cookies去Get其他页面的时候就提示超时。不知道怎么回事

我认为问题在于
微信公众平台是https的,第一次post登录没问题,因为是程序不是浏览器,
所以第二次的时候已经断开了。所以超时

求解决办法。。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-2-15 20:32:42 | 显示全部楼层
看看第二部代码
 楼主| 发表于 2014-2-19 09:37:27 | 显示全部楼层
本帖最后由 .zZ 于 2014-2-19 09:40 编辑

不好意思,放个假给忘了这个东西我把完整代码贴出来,里面的那个HOST属性我直接在HttpHelper源文件改了
[C#] 纯文本查看 复制代码

            //设置Header参数
            if (item.Header != null && item.Header.Count > 0) foreach (string key in item.Header.AllKeys)
                {
                    request.Headers.Add(key, item.Header[key]);
                }
            request.Host = "mp.weixin.qq.com";

 楼主| 发表于 2014-2-19 09:37:51 | 显示全部楼层
本帖最后由 .zZ 于 2014-2-19 09:39 编辑

[C#] 纯文本查看 复制代码
        public string cs;
        //开始
        public void Start()
        {
            string username = user.Text.Trim();
            string pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(pass.Text.Trim(), "MD5").ToLower();
            //登录
            HttpResult hrLogin = GetHtml("https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN", "username=" + username + "&pwd=" + pwd + "&imgcode=&f=json", "");
            //获取cookies
            cs = hrLogin.Cookie;
            //获取的cookies跟URL传入下一步
            HttpResult hrIndex = GetHtml("https://mp.weixin.qq.com" + GetUrl(hrLogin.Html), cs);
            MessageBox.Show(hrIndex.Html);
        }
        //第一步POST提交
        public HttpResult GetHtml(string url, string datas, string cookies)
        {
            HttpItem item = new HttpItem()
            {
                URL = url,
                Encoding = Encoding.UTF8,
                Method = "POST",
                Postdata = datas,
                UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)",
                Referer = "mp.weixin.qq.com/",
                ContentType = "application/x-www-form-urlencoded; charset=UTF-8",
                Accept = "application/json, text/javascript, */*; q=0.01",//Cookie = cookies
            };
            HttpHelper http = new HttpHelper();
            HttpResult hr = http.GetHtml(item);
            return hr;
        }
        //第二步Get提交
        public HttpResult GetHtml(string url, string cookies)
        {
            HttpWebRequest hw = (HttpWebRequest)WebRequest.Create(url);
            hw.AllowAutoRedirect = true;
            HttpItem item = new HttpItem();
            item.URL = url;
            item.Encoding = Encoding.UTF8;
            item.Method = "GET";
            item.Cookie = cookies;
            HttpHelper http = new HttpHelper();
            HttpResult hr = http.GetHtml(item);
            return hr;
        }

        /// <summary>
        /// 将json数据反序列化为Dictionary
        /// </summary>
        /// <param name="jsonData">json数据</param>
        /// <returns></returns>
        private Dictionary<string, object> JsonToDictionary(string jsonData)
        {
            //实例化JavaScriptSerializer类的新实例
            JavaScriptSerializer jss = new JavaScriptSerializer();
            try
            {
                //将指定的 JSON 字符串转换为 Dictionary<string, object> 类型的对象
                return jss.Deserialize<Dictionary<string, object>>(jsonData);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        private string GetUrl(string html)
        {
            Dictionary<string, object> dic2 = JsonToDictionary(html);
            //Dictionary<string, object> data2 = (Dictionary<string, object>)dic2["ErrMsg"];
            return dic2["ErrMsg"].ToString();
        }
发表于 2014-2-19 09:42:50 | 显示全部楼层
ContentType = "application/x-www-form-urlencoded; charset=UTF-8",
        Accept = "application/json, text/javascript, */*; q=0.01",//Cookie = cookies
第一步的这两个去了吧。
第二步HttpWebRequest hw = (HttpWebRequest)WebRequest.Create(url);
    hw.AllowAutoRedirect = true;这是干吗啊。
我Httphelper里本来就有这些了,不需要
这有可能是Cookie格式的问题,你可以不使用字符中Cookie试试
http://www.sufeinet.com/thread-6015-1-1.html
 楼主| 发表于 2014-2-19 09:55:41 | 显示全部楼层
站长苏飞 发表于 2014-2-19 09:42
ContentType = "application/x-www-form-urlencoded; charset=UTF-8",
        Accept = "application/js ...

谢谢苏站长!我第二部的那俩个本来是想试试用原始的方法行不行的,后来没删干净...
我用抓包工具BurpSuite提交第二部的数据,返回的结果就没问题,是成功的,但我用程序提交的就有问题。我看了下提交的内容格式好像都一样,苏站长有没有什么登录HTTPS以后操作的例子?我自己下载研究下.
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-24 01:41

© 2014-2021

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