Пример #1
0
        /**
         * 构造方法,初始化模块和服务
         * 账号/密码    监听器     线程执行器
         *
         * @param username a {@link java.lang.String} object.
         * @param password a {@link java.lang.String} object.
         * @param notifyListener a {@link iqq.im.QQNotifyListener} object.
         * @param actorDispatcher a {@link iqq.im.actor.ThreadActorDispatcher} object.
         */
        public WebQQClient(
            QQNotifyListener notifyListener, ThreadActorDispatcher actorDispatcher)
        {
            this.modules = new Dictionary <AbstractModule.Type, AbstractModule>();

            this.modules.Add(AbstractModule.Type.LOGIN, new LoginModule());
            this.modules.Add(AbstractModule.Type.PROC, new ProcModule());
            this.modules.Add(AbstractModule.Type.USER, new UserModule());
            this.modules.Add(AbstractModule.Type.BUDDY, new BuddyModule());
            this.modules.Add(AbstractModule.Type.CATEGORY, new CategoryModule());
            this.modules.Add(AbstractModule.Type.GROUP, new GroupModule());
            this.modules.Add(AbstractModule.Type.CHAT, new ChatModule());
            //this.modules.Add(AbstractModule.Type.DISCUZ, new DiscuzModule());
            //this.modules.Add(AbstractModule.Type.EMAIL, new EmailModule());

            //this.modules.Add(AbstractModule.Type.QM_LOGIN, new QmLoginModule());
            //this.modules.Add(AbstractModule.Type.QM_PROC, new QmProcModule());
            //this.modules.Add(AbstractModule.Type.QM_MGR, new QmMgrModule());

            //this.modules.Add(AbstractModule.Type.WB_LOGIN, new WbLoginModule());
            //this.modules.Add(AbstractModule.Type.WB_PROC, new WbProcModule());

            this.service = new ApacheHttpService();

            this.session         = new QQSession();
            this.store           = new QQStore();
            this.notifyListener  = notifyListener;
            this.actorDispatcher = actorDispatcher;

            this.init();
        }
Пример #2
0
        /** {@inheritDoc} */
        public override void onHttpStatusOK(QQHttpResponse response)
        {
            //{"retcode":0,"result":{"uin":236557647,"cip":1991953329,"index":1075,"port":51494,"status":"online","vfwebqq":"41778677efd86bae2ed575eea02349046a36f3f53298a34b97d75297ec1e67f6ee5226429daa6aa7","psessionid":"8368046764001d636f6e6e7365727665725f77656271714031302e3133332e342e31373200005b9200000549016e04004f95190e6d0000000a4052347371696a62724f6d0000002841778677efd86bae2ed575eea02349046a36f3f53298a34b97d75297ec1e67f6ee5226429daa6aa7","user_state":0,"f":0}}
            JSONObject json    = new JSONObject(new JSONTokener(new StringReader(response.getResponseMessage())));
            QQSession  session = getContext().getSession();
            QQAccount  account = (QQAccount)getContext().getAccount();

            if (json.getInt("retcode") == 0)
            {
                JSONObject ret = json.getJSONObject("result");
                account.setUin(ret.getLong("uin"));
                account.setQQ(ret.getLong("uin"));
                session.setSessionId(ret.getString("psessionid"));
                session.setVfwebqq(ret.getString("vfwebqq"));
                account.setStatus(QQStatus.ONLINE);
                session.setState(QQSession.State.ONLINE);
                session.setIndex(ret.getInt("index"));
                session.setPort(ret.getInt("port"));
                notifyActionEvent(QQActionEvent.Type.EVT_OK, null);
            }
            else
            {
                notifyActionEvent(QQActionEvent.Type.EVT_ERROR, new QQException(QQWpfApplication1.action.QQException.QQErrorCode.INVALID_RESPONSE));            //TODO ..
            }
        }
Пример #3
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            ApacheHttpService httpService = getContext().getSerivce();
            QQSession         session     = getContext().getSession();
            Random            rand        = new Random();

            if (session.getClientId() == 0)
            {
                session.setClientId(rand.Next());         //random??
            }

            JSONObject json = new JSONObject();

            json.put("status", "online");
            json.put("ptwebqq", httpService.getCookie("ptwebqq", QQConstants.URL_CHANNEL_LOGIN).Value);
            json.put("passwd_sig", "");
            json.put("clientid", session.getClientId());
            json.put("psessionid", session.getSessionId());

            QQHttpRequest req = createHttpRequest("POST", QQConstants.URL_CHANNEL_LOGIN);

            req.addPostValue("r", json.ToString());
            req.addPostValue("clientid", session.getClientId() + "");
            req.addPostValue("psessionid", session.getSessionId());

            //req.addHeader("Referer", QQConstants.REFFER);
            return(req);
        }
Пример #4
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            QQSession     session = getContext().getSession();
            QQHttpRequest req     = createHttpRequest("GET",
                                                      QQConstants.URL_GET_SESSION_MSG_SIG);

            if (user is QQGroupMember)
            {
                QQGroupMember mb = (QQGroupMember)user;
                mb.setServiceType(0);
                req.addGetValue("id", mb.getGroup().getGin() + "");
                req.addGetValue("service_type", "0");         // 0为群,1为讨论组
            }
            else if (user is QQDiscuzMember)
            {
                QQDiscuzMember mb = (QQDiscuzMember)user;
                mb.setServiceType(1);
                req.addGetValue("id", mb.getDiscuz().getDid() + "");
                req.addGetValue("service_type", "1");         // 0为群,1为讨论组
            }
            else
            {
            }
            req.addGetValue("to_uin", user.getUin() + "");
            req.addGetValue("clientid", session.getClientId() + "");
            req.addGetValue("psessionid", session.getSessionId());
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");
            return(req);
        }
Пример #5
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            // retype:1 app:EQQ
            // itemlist:{"groupmask":{"321105219":"1","1638195794":"0","cAll":0,"idx":1075,"port":37883}}
            // vfwebqq:8b26c442e239630f250e1e74d135fd85ab78c38e7b8da1c95a2d1d560bdebd2691443df19d87e70d
            QQStore       store   = getContext().getStore();
            QQSession     session = getContext().getSession();
            QQHttpRequest req     = createHttpRequest("POST", QQConstants.URL_GROUP_MESSAGE_FILTER);

            req.addPostValue("retype", "1");            // 群???
            req.addPostValue("app", "EQQ");

            JSONObject groupmask = new JSONObject();

            groupmask.put("cAll", 0);
            groupmask.put("idx", session.getIndex());
            groupmask.put("port", session.getPort());
            foreach (QQGroup g in store.getGroupList())
            {
                if (g.getGin() > 0)
                {
                    groupmask.put(g.getGin() + "", g.getMask() + "");
                }
            }
            JSONObject itemlist = new JSONObject();

            itemlist.put("groupmask", groupmask);
            req.addPostValue("itemlist", itemlist.ToString());
            req.addPostValue("vfwebqq", getContext().getSession().getVfwebqq());

            return(req);
        }
Пример #6
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            QQHttpRequest req     = createHttpRequest("GET", QQConstants.URL_GET_USER_LEVEL);
            QQSession     session = getContext().getSession();

            req.addGetValue("tuin", user.getUin() + "");
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");
            req.addGetValue("vfwebqq", session.getVfwebqq());
            return(req);
        }
Пример #7
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            // r:{"to":2982077931,"face":0,"content":"[\"123\",[\"face\",1],\"456\",[\"face\",0],\"\",\"\\n【提示:此用户正在使用Q+ Web:http://web.qq.com/】\",[\"font\",{\"name\":\"微软雅黑\",\"size\":\"11\",\"style\":[0,0,0],\"color\":\"ffcc99\"}]]","msg_id":91310001,"clientid":"74131454","psessionid":"8368046764001e636f6e6e7365727665725f77656271714031302e3133332e34312e3230320000230700001f01026e04002aafd23f6d0000000a40484a526f4866467a476d00000028d954c71693cd99ae8c0c64b651519e88f55ce5075140346da7d957f3abefb51d0becc25c425d7cf5"}
            // r:{"group_uin":3408869879,"content":"[\"群消息发送测试\",[\"face\",13],\"\",\"\\n【提示:此用户正在使用Q+ Web:http://web.qq.com/】\",[\"font\",{\"name\":\"微软雅黑\",\"size\":\"11\",\"style\":[0,0,0],\"color\":\"ffcc99\"}]]","msg_id":91310002,"clientid":"74131454","psessionid":"8368046764001e636f6e6e7365727665725f77656271714031302e3133332e34312e3230320000230700001f01026e04002aafd23f6d0000000a40484a526f4866467a476d00000028d954c71693cd99ae8c0c64b651519e88f55ce5075140346da7d957f3abefb51d0becc25c425d7cf5"}
            // clientid、psessionid

            QQSession     session = getContext().getSession();
            JSONObject    json    = new JSONObject();
            QQHttpRequest req     = null;

            if (msg.getType() == QQMsg.Type.BUDDY_MSG)
            {
                req = createHttpRequest("POST", QQConstants.URL_SEND_BUDDY_MSG);
                json.put("to", msg.getTo().getUin());
                json.put("face", 0);         // 这个是干嘛的??
            }
            else if (msg.getType() == QQMsg.Type.GROUP_MSG)
            {
                req = createHttpRequest("POST", QQConstants.URL_SEND_GROUP_MSG);
                json.put("group_uin", msg.getGroup().getGin());
//			json.put("key", session.getCfaceKey());
//			json.put("sig", session.getCfaceSig());
            }
            else if (msg.getType() == QQMsg.Type.DISCUZ_MSG)
            {
                req = createHttpRequest("POST", QQConstants.URL_SEND_DISCUZ_MSG);
                json.put("did", msg.getDiscuz().getDid());
                json.put("key", session.getCfaceKey());
                json.put("sig", session.getCfaceSig());
            }
            else if (msg.getType() == QQMsg.Type.SESSION_MSG)           // 临时会话消息
            {
                req = createHttpRequest("POST", QQConstants.URL_SEND_SESSION_MSG);
                QQStranger member = (QQStranger)msg.getTo();
                json.put("to", member.getUin());
                json.put("face", 0);         // 这个是干嘛的??
                json.put("group_sig", member.getGroupSig());
                json.put("service_type", member.getServiceType() + "");
            }
            else
            {
            }

            json.put("content", msg.packContentList());
            json.put("msg_id", 91310001 + "");
            json.put("clientid", session.getClientId());
            json.put("psessionid", session.getSessionId());

            req.addPostValue("r", json.ToString());
            req.addPostValue("clientid", session.getClientId() + "");
            req.addPostValue("psessionid", session.getSessionId());
            req.addHeader("Referer", QQConstants.REFFER);

            return(req);
        }
Пример #8
0
        /**
         * <p>doPollMsg.</p>
         */
        public void doPollMsg()
        {
            LoginModule login = (LoginModule)getContext().getModule(AbstractModule.Type.LOGIN);

            login.pollMsg(delegate(QQActionEvent evt) {
                // 回调通知事件函数
                if (evt.getType() == QQActionEvent.Type.EVT_OK)
                {
                    List <QQNotifyEvent> evts = (List <QQNotifyEvent>)evt.getTarget();
                    foreach (QQNotifyEvent e in evts)
                    {
                        getContext().fireNotify(e);
                    }

                    // 准备提交下次poll请求
                    QQSession session = getContext().getSession();
                    if (session.getState() == QQSession.State.ONLINE)
                    {
                        doPollMsg();
                    }
                    else if (session.getState() != QQSession.State.KICKED)
                    {
                        relogin();
                    }
                }
                else if (evt.getType() == QQActionEvent.Type.EVT_ERROR)
                {
                    QQSession session = getContext().getSession();
                    QQAccount account = (QQAccount)getContext().getAccount();
                    session.setState(QQSession.State.OFFLINE);
                    account.setStatus(QQStatus.OFFLINE);
                    //因为自带了错误重试机制,如果出现了错误回调,表明已经超时多次均失败,这里直接返回网络错误的异常
                    QQException ex = (QQException)evt.getTarget();
                    QQWpfApplication1.action.QQException.QQErrorCode code = ex.getError();
                    if (code == QQWpfApplication1.action.QQException.QQErrorCode.INVALID_LOGIN_AUTH)
                    {
                        relogin();
                    }
                    else if (code == QQWpfApplication1.action.QQException.QQErrorCode.IO_ERROR || code == QQWpfApplication1.action.QQException.QQErrorCode.IO_TIMEOUT)
                    {
                        //粗线了IO异常,直接报网络错误
                        getContext().fireNotify(new QQNotifyEvent(QQNotifyEvent.Type.NET_ERROR, ex));
                    }
                    else
                    {
                        relogin();
                        doPollMsg();
                    }
                }
                else if (evt.getType() == QQActionEvent.Type.EVT_RETRY)
                {
                }
            });
        }
Пример #9
0
        public override QQHttpRequest onBuildRequest()
        {
            QQSession     session = getContext().getSession();
            QQHttpRequest req     = createHttpRequest("GET", QQConstants.URL_GET_STRANGER_INFO);

            req.addGetValue("tuin", user.getUin() + "");
            req.addGetValue("verifysession", "");       // ?
            req.addGetValue("gid", "0");
            req.addGetValue("code", "");
            req.addGetValue("vfwebqq", session.getVfwebqq());
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");
            return(req);
        }
Пример #10
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            QQSession session = getContext().getSession();

            QQHttpRequest req = createHttpRequest("GET",
                                                  QQConstants.URL_GET_USER_SIGN);

            req.addGetValue("tuin", buddy.getUin() + "");
            req.addGetValue("vfwebqq", session.getVfwebqq());
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");

            req.addHeader("Referer", QQConstants.REFFER);
            return(req);
        }
Пример #11
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            QQSession session = getContext().getSession();

            QQHttpRequest req = createHttpRequest("GET",
                                                  QQConstants.URL_GET_ONLINE_BUDDY_LIST);

            req.addGetValue("clientid", session.getClientId() + "");
            req.addGetValue("psessionid", session.getSessionId());
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");

            req.addHeader("Referer", QQConstants.REFFER);
            return(req);
        }
Пример #12
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            QQSession     session = getContext().getSession();
            QQHttpRequest req     = createHttpRequest("GET",
                                                      QQConstants.URL_GET_USER_FACE);

            req.addGetValue("uin", group.getCode() + "");
            req.addGetValue("vfwebqq", session.getVfwebqq());
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");
            req.addGetValue("cache", "0");
            req.addGetValue("type", "4");
            req.addGetValue("fid", "0");
            return(req);
        }
Пример #13
0
        /** {@inheritDoc} */

        public override QQHttpRequest onBuildRequest()
        {
            QQSession session = getContext().getSession();

            QQHttpRequest req = createHttpRequest("GET", QQConstants.URL_LOGOUT);

            req.addGetValue("ids", "");     // 产生过会话才出现ID,如何获取??
            req.addGetValue("clientid", session.getClientId() + "");
            req.addGetValue("psessionid", session.getSessionId());
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");

            req.addHeader("Referer", QQConstants.REFFER);
            return(req);
        }
Пример #14
0
        public override QQHttpRequest onBuildRequest()
        {
            QQSession     session = getContext().getSession();
            QQHttpRequest req     = createHttpRequest("GET", QQConstants.URL_GET_USER_FACE);

            req.addGetValue("uin", user.getUin() + "");
            req.addGetValue("vfwebqq", session.getVfwebqq());
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");
            req.addGetValue("cache", 0 + "");   // ??
            req.addGetValue("type", 1 + "");    // ??
            req.addGetValue("fid", 0 + "");     // ??

            req.addHeader("Referer", QQConstants.REFFER);
            return(req);
        }
Пример #15
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            QQSession session = getContext().getSession();

            QQHttpRequest req = createHttpRequest("GET",
                                                  QQConstants.URL_CHANGE_STATUS);

            //req.addGetValue("newstatus", status.getValue());
            req.addGetValue("clientid", session.getClientId() + "");
            req.addGetValue("psessionid", session.getSessionId());
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");

            req.addHeader("Referer", QQConstants.REFFER);
            return(req);
        }
Пример #16
0
        /** {@inheritDoc} */
        public override void onHttpStatusOK(QQHttpResponse response)
        {
            Regex pt = new Regex(QQConstants.REGXP_LOGIN_SIG);
            Match mc = pt.Match(response.getResponseString());

            if (mc.Success)
            {
                QQSession session = getContext().getSession();
                session.setLoginSig(mc.Groups[1].Value);
                notifyActionEvent(QQActionEvent.Type.EVT_OK, session.getLoginSig());
            }
            else
            {
                notifyActionEvent(QQActionEvent.Type.EVT_ERROR, new QQException(QQWpfApplication1.action.QQException.QQErrorCode.INVALID_RESPONSE, "Login Sig Not Found!!"));
            }
        }
Пример #17
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            QQSession session = getContext().getSession();
            // tuin=4245757755&verifysession=&type=1&code=&vfwebqq=**&t=1361631644492
            QQHttpRequest req = createHttpRequest("GET",
                                                  QQConstants.URL_GET_USER_ACCOUNT);

            req.addGetValue("tuin", buddy.getUin() + "");
            req.addGetValue("vfwebqq", session.getVfwebqq());
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");
            req.addGetValue("verifysession", "");     // 验证码??
            req.addGetValue("type", 1 + "");
            req.addGetValue("code", "");

            req.addHeader("Referer", QQConstants.REFFER);
            return(req);
        }
Пример #18
0
        public override QQHttpRequest onBuildRequest()
        {
            QQSession session = getContext().getSession();

            JSONObject json = new JSONObject();

            json.put("vfwebqq", session.getVfwebqq());
            json.put("clientid", session.getClientId());
            json.put("psessionid", session.getSessionId());

            QQHttpRequest req = createHttpRequest("POST", QQConstants.URL_GET_RECENT_LIST);

            req.addPostValue("r", json.ToString());
            req.addPostValue("clientid", session.getClientId() + "");
            req.addPostValue("psessionid", session.getSessionId());

            return(req);
        }
Пример #19
0
        /** {@inheritDoc} */
        public override void onHttpStatusOK(QQHttpResponse response)
        {
            QQSession session = getContext().getSession();

            JSONObject json = new JSONObject(response.getResponseString());

            if (json.getInt("retcode") == 0)
            {
                JSONObject obj = json.getJSONObject("result");
                session.setCfaceKey(obj.getString("gface_key"));
                session.setCfaceSig(obj.getString("gface_sig"));
                notifyActionEvent(QQActionEvent.Type.EVT_OK, session);
            }
            else
            {
                notifyActionEvent(QQActionEvent.Type.EVT_ERROR,
                                  new QQException(QQWpfApplication1.action.QQException.QQErrorCode.UNEXPECTED_RESPONSE, response.getResponseString()));
            }
        }
Пример #20
0
	/** {@inheritDoc} */
    public override QQHttpRequest onBuildRequest()
    {
		QQSession session = getContext().getSession();
        QQAccount account = (QQAccount)getContext().getAccount();
		ApacheHttpService httpService = getContext().getSerivce();
		Cookie ptwebqq = httpService.getCookie("ptwebqq", QQConstants.URL_GET_USER_CATEGORIES);
		
		JSONObject json = new JSONObject();
		json.put("h", "hello");
		json.put("vfwebqq", session.getVfwebqq()); // 同上
		json.put("hash", QQEncryptor.getHash(account.getUin() + "", ptwebqq.Value));

		QQHttpRequest req = createHttpRequest("POST",
				QQConstants.URL_GET_USER_CATEGORIES);
		req.addPostValue("r", json.ToString());

		req.addHeader("Referer", QQConstants.REFFER);

		return req;
	}
Пример #21
0
        /**
         * <p>relogin.</p>
         */
        public void relogin()
        {
            QQSession session = getContext().getSession();

            if (session.getState() == QQSession.State.LOGINING)
            {
                return;
            }
            // 登录失效,重新登录
            relogin(getContext().getAccount().getStatus(), delegate(QQActionEvent evt) {
                if (evt.getType() == QQActionEvent.Type.EVT_OK)
                {
                    // 重新登录成功重新POLL
                    getContext().fireNotify(new QQNotifyEvent(QQNotifyEvent.Type.RELOGIN_SUCCESS, null));
                }
                else if (evt.getType() == QQActionEvent.Type.EVT_ERROR)
                {
                    getContext().fireNotify(new QQNotifyEvent(QQNotifyEvent.Type.UNKNOWN_ERROR, null));
                }
            });
        }
Пример #22
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            QQSession  session = getContext().getSession();
            JSONObject json    = new JSONObject();

            json.put("clientid", session.getClientId());
            json.put("psessionid", session.getSessionId());
            json.put("key", 0);               // 暂时不知道什么用的
            json.put("ids", new JSONArray()); // 同上

            QQHttpRequest req = createHttpRequest("POST", QQConstants.URL_POLL_MSG);

            req.addPostValue("r", json.ToString());
            req.addPostValue("clientid", session.getClientId() + "");
            req.addPostValue("psessionid", session.getSessionId());
            //req.setReadTimeout(70 * 1000);
            //req.setConnectTimeout(10 * 1000);
            req.addHeader("Referer", QQConstants.REFFER);

            return(req);
        }
Пример #23
0
        /* (non-Javadoc)
         * @see iqq.im.action.AbstractHttpAction#onBuildRequest()
         */
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            QQHttpRequest req = createHttpRequest("GET", QQConstants.URL_GET_GROUP_PIC);

//		fid	3648788200
//		gid	2890126166
//		pic	{F2B04C26-9087-437D-4FD9-6A0ED84155FD}.jpg
//		rip	123.138.154.167
//		rport	8000
//		t	1365343106
//		type	0
//		uin	3559750777
//		vfwebqq	70b5f77bfb1db1367a2ec483ece317ea9ef119b9b59e542b2e8586f7ede6030ff56f7ba8798ba34b
//		"cface",
//        {
//            "name": "{F2B04C26-9087-437D-4FD9-6A0ED84155FD}.jpg",
//            "file_id": 3648788200,
//            "key": "pcm4N6IKmQ852Pus",
//            "server": "123.138.154.167:8000"
//        }

            QQSession session = getContext().getSession();

            req.addGetValue("fid", cface.getFileId() + "");
            req.addGetValue("gid", (msg.getGroup() != null ?
                                    msg.getGroup().getCode(): msg.getDiscuz().getDid()) + "");
            req.addGetValue("pic", cface.getFileName());
            String[] parts = cface.getServer().Split(':');
            req.addGetValue("rip", parts[0]);
            req.addGetValue("rport", parts[1]);
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");
            req.addGetValue("type", msg.getGroup() != null ? "0" : "1");
            req.addGetValue("uin", msg.getFrom().getUin() + "");
            req.addGetValue("vfwebqq", session.getVfwebqq());

            //req.setOutputStream(picOut);
            return(req);
        }
Пример #24
0
        /** {@inheritDoc} */
        public override QQHttpRequest onBuildRequest()
        {
            QQSession session = getContext().getSession();

            /*
             * tuin	236557647
             * verifysession
             * code
             * vfwebqq	efa425e6afa21b3ca3ab8db97b65afa0535feb4af47a38cadcf1a4b1650169b4b4eee9955f843990
             * t	1346856270187*/



            QQHttpRequest req = createHttpRequest("GET", QQConstants.URL_GET_FRIEND_INFO);

            req.addGetValue("tuin", buddy.getUin() + "");
            req.addGetValue("verifysession", "");       //难道有验证码???
            req.addGetValue("code", "");
            req.addGetValue("vfwebqq", session.getVfwebqq());
            req.addGetValue("t", DateTime.Now.Ticks / 1000 + "");

            req.addHeader("Referer", QQConstants.REFFER);
            return(req);
        }