苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 14986|回复: 7

[其他] QQ模擬登錄獲取cookie的問題,好幾天了,求解決!

[复制链接]
发表于 2014-1-21 15:40:25 | 显示全部楼层 |阅读模式
在QQ模擬登錄的時候,一次登錄成功,並返回了一個302的地址
[C#] 纯文本查看 复制代码
ptuiCB('0','0','http://ptlogin4.web2.qq.com/check_sig?pttype=1&uin=858583844&service=login&nodirect=0&ptsig=vgPrk1WTEAmyWDQ0d2Z7NdsqfQ3rOczF*OHBSsrs1qw_&s_url=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D10&f_url=&ptlang=2052&ptredirect=100&aid=1003903&daid=164&j_later=0&low_login_hour=0®master=0&pt_login_type=1&pt_aid=0&pt_aaid=0&pt_light=0','0','登录成功!', 'Cat');


在二次登錄的時候需要使用Get上面地址時獲取 的cookie參數 p_skey和token 。。但是為什麼我用一次登錄成功的cookie去Get一次登錄返回的地址時,返回的cookie為空呢。。正確的應該是返回二次登錄需要的參數的。

下面是我抓包的圖片。正常情況下,Get一次登錄成功後返回的地址是有Cookie接受到的,但程序模擬的時候接受不到。。
QQ图片20140121153836.jpg


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-1-21 16:04:14 | 显示全部楼层
带着Cookie去访问这个302的地址 ,不要让程序自动跳转,
 楼主| 发表于 2014-1-21 16:09:09 | 显示全部楼层
站长苏飞 发表于 2014-1-21 16:04
带着Cookie去访问这个302的地址 ,不要让程序自动跳转,

沒有讓他自動跳轉,但還是一樣的。只是結果不一樣,最主要的是cookie,還是獲取不到。剛看了下是不是這個域的問題。。因為請求的域和接收cookie的域不一樣。。下圖


QQ图片20140121160841.jpg
发表于 2014-1-21 16:13:02 | 显示全部楼层
代码怎么写的贴一下看看
 楼主| 发表于 2014-1-21 16:26:25 | 显示全部楼层
本帖最后由 self001 于 2014-1-21 16:28 编辑
站长苏飞 发表于 2014-1-21 16:13
代码怎么写的贴一下看看

就是用你那個登錄校友的實例 改了一下

[C#] 纯文本查看 复制代码
        public string Login_Automatic(string qqName, string Password, string Verify, ref string cookie)
        {
            string str = string.Empty;
            str = "https://ssl.ptlogin2.qq.com/login?u=" + qqName + "&p=" + QQencryption.MD5_QQ_2_Encrypt(long.Parse(qqName), Password, Verify) +
                "&verifycode=" + Verify + "&webqq_type=10&remember_uin=1&login2qq=1&aid=1003903&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D10&h=1&ptredirect=0&ptlang=2052&daid=164&from_ui=1&pttype=1&dumy=&fp=loginerroralert&action=3-0-6012&mibao_css=m_webqq&t=1&g=1&js_type=0&js_ver=10064&login_sig=qDlV*vNOKg*Fqxs-Y*SQ9V4bSTOLUPjq95ay8z0C1W*T5oS9LtJ4T674GEu72zt5";

            item = new HttpItem()
            {
                URL = str,
                //Postdata = str,
                Method = "GET",
                Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight-2-b1, */*",
                Encoding = "utf-8",
                ContentType = "application/x-www-form-urlencoded",
                UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; Alexa Toolbar; mxie; .NET CLR 1.1.4322)",
                Cookie = cookie,
                Allowautoredirect = false,
            };
            item.Headersadd("Accept-Encoding", "gzip, deflate, identity");
            item.Headersadd("Accept-Language", "zh-CN");
            HttpResult result = http.GetHtml(item);
            cookie = result.Cookie;

            Match mhtml = Regex.Match(result.Html, @"'(http://.+?)'");
            string shtml = mhtml.Groups[1].Value;

            if (String.IsNullOrEmpty(shtml)) return string.Empty;

  
            HttpItem item1 = new HttpItem()
            {
                URL = shtml,
                Method = "GET",
                Accept = "text/html, application/xhtml+xml, */*",
                ContentType = "application/x-www-form-urlencoded",
                UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; Alexa Toolbar; mxie; .NET CLR 1.1.4322)",
                Cookie = cookie,
                Allowautoredirect = false,
            };
            HttpHelper http1 = new HttpHelper();
            HttpResult result1 = http1.GetHtml(item1);
       //問題就在這裡。。這裡的cookie一直是空的。。
       //問題就在這裡。。這裡的cookie一直是空的。正常是應該帶有p_skey和token的
            cookie = result1.Cookie;

            return result.Html;
        }



 楼主| 发表于 2014-1-21 17:15:21 | 显示全部楼层
站长苏飞 发表于 2014-1-21 16:13
代码怎么写的贴一下看看

飛哥有空幫我看一下呀,我確實找不出來原因了。找了好幾天了。。該搜索的都搜了。。估計是跨域的問題cookie沒有獲取到。。二次登錄只要這個cookie獲取到就應該沒 有問題了
发表于 2014-1-21 20:37:53 | 显示全部楼层
self001 发表于 2014-1-21 17:15
飛哥有空幫我看一下呀,我確實找不出來原因了。找了好幾天了。。該搜索的都搜了。。估計是跨域的問題cook ...

应该是你哪里没处理好,不会多复杂的(PS:我没看你登录哪里)。
发表于 2014-1-22 08:20:07 | 显示全部楼层
你先更新一下Httphelper类吧,你这版本太老了点了,UserAgent,Accept这些参数不要设置,不需要的。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2025-1-4 13:09

© 2014-2021

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