zoukankan      html  css  js  c++  java
  • 研究“QQ开心农场”一点心得

    一、登录的状态信息维护

            这个是开门钥匙,如果登录信息的COOKIE保存不了,后面操作没办法谈起了。在网上找了下,有比较多的解决办法。

            最傻瓜的解决办法就是用火狐登录,然后通过插件得到QQ农场所有的COOKIE信息,在自己的程序里使用CookieContainer 类将这些COOKIE逐个填充,后续抓取页面的操作都使用这个COOKIE容器即可。

            网上看到最多的一种办法就是用webbrowser控件登录,然后通过docuement.cookie属性得到COOKIE,然后做解析,再将解析的COOKIE写入CookieContainer ,这样有一个弊病,就是没办法设置COOKIE的域,估计有些情况下这种办法登录有问题。

            博客园上看到一种办法,就是使用WebRequest对象,自己构造CookieContainer ,然后找到QQ登录的入口,向对应的登录页面提交。这样解决方式比较好,可以得到完整的CookieContainer ,但相对复杂点,因为QQ登录的时候密码做过加密,首先要找到加密的方法(博客园上的那位兄弟很聪明,使用webbrowser来调用加密的JS方法),然后要找到提交的页面(这个得通过分析HTML源码得到)。

            最后我想到一个办法,也是傻瓜式的,同样使用webbrowser控件,加载QQ的登录页面,通过QQ自己的登录页实现登录,省去一系列的登录麻烦,登录完成后,webbrowser控件来加载需要获得的抓取指定页面的信息,这样也不用WebRequest对象来获取页面的数据了,一举两得。

     

    二、页面数据的获得

        这个是核心,用于获取好友的信息,农场的种子,地,作物等页面信息,关键是找到页面的地址和发送的数据格式。

        网上看到很多分析HTTP抓包的数据都是用IE的插件完成的,可以查看到IE向WEB服务器提交的表单信息。我网上找了下有几种,下载了还没来得及试用。

        我是通过分析开心农场的SWF反编译代码得到的,比较详细。

     

        接下来是数据的转换,开心农场使用JSON来交换数据,在。NET中有专门的序列化和反序列化的类它们是:JsonQueryStringConverter 类和 DataContractJsonSerializer

     

    JsonQueryStringConverter 有两个方法 ConvertStringToValue,ConvertValueToString 分别将JSON字符串转化为对象和将对象转化为JSON字符串,这里有一个注意的地方(红色标注) 这样将qq对象序列化之后的JSON字符串 {"userId":xx;userName:xx ...} ,否则 。NET会序列化成{"<userId>k__BackingField":xx,"<userName>k__BackingField":... 这样并不是想要的预期结果

     

        [DataContract]
        class qq
        {
            [DataMember]
            public string userId { set; get; }

            [DataMember]
            public string userName { set; get; }

            [DataMember]
            public string headPic { set; get; }

            [DataMember]
            public int yellowlevel { set; get; }

            [DataMember]
            public int yellowstatus { set; get; } 

            [DataMember]
            public int exp { set; get; }

            [DataMember]
            public int money { set; get; }

            [DataMember]
            public int pf { set; get; }
           

     }

  • 相关阅读:
    BZOJ-1034: [ZJOI2008]泡泡堂BNB (田忌赛马贪心)
    BZOJ-2190: [SDOI2008]仪仗队 (欧拉函数)
    BZOJ-1864: [Zjoi2006]三色二叉树 (julao都说简单的树形DP)
    BZOJ-2657: [Zjoi2012]旅游(journey) (树形DP求最长链)
    BZOJ-2241: [SDOI2011]打地鼠 (模拟+枚举)
    BZOJ-1207: [HNOI2004]打鼹鼠 (LIS类似DP)
    BZOJ-1821: [JSOI2010]Group 部落划分 Group (二分+并查集)
    BZOJ-1218: [HNOI2003]激光炸弹 (前缀和+模拟)
    [SinGuLaRiTy] ZKW线段树
    [SinGuLaRiTy] 字节大小
  • 原文地址:https://www.cnblogs.com/jordan2009/p/1550049.html
Copyright © 2011-2022 走看看