“
2014/06/29修改
修改成先json.loads(ret)再调用callback
2014/06/28修改
重写了代码=。=,,,
”
轮询消息的地址:http://d.web2.qq.com/channel/poll2
发送请求所用到的Form:
data = {
r:{"ptwebqq":"ptwebqq_value", "clientid":"clientid_value", "psessionid":"psessionid_value", "key":""}
}
大致就上面那样, 里面的 ptwebqq, clientid, psessionid在模拟登录完成后都能得到; 模拟登录参考( webQQ协议——模拟登录)
下面是我写的一个轮询消息的模块
实例化类时要传入dict (dict由模拟登录模块登录成功后返回)
然后调用poll方法, 需传入1个函数用于处理返回的信息
PollMsg.py(Queryable模块在模拟登录的那篇文章中。。)
#coding=utf-8
import json;
import threading;
import urllib;
import urllib.request;
from urllib.parse import urlencode;
from Queryable import *;
URL_POLLMSG = "http://d.web2.qq.com/channel/poll2";
class PollMsg(Queryable):
def __init__(self, dict):
Queryable.__init__(self, dict);
def poll(self, callback = None):
pollMsg = threading.Thread(target = self._poll, args = (callback, ));
pollMsg.start();
def _poll(self, callback):
while(1):
request = urllib.request.Request(URL_POLLMSG, headers = self.queryInfo("header"));
opener = self.queryInfo("opener");
data = {"r":'{"ptwebqq":"' + self.queryInfo("ptwebqq") + '","clientid":' + self.queryInfo("clientid") + ',"psessionid":"' + self.queryInfo("psessionid") + '","key":""}'};
ret = json.loads(opener.open(request, urlencode(data).encode("utf-8")).read().decode("utf-8"));
if(callback != None):
callback(ret);