def __init__(self, http=None): self.http = http or TornadoHTTPClient() if not http: self.http.set_user_agent( "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36" ) self.http.debug = getattr(config, "TRACE", False) self.http.validate_cert = False self.http.set_global_headers({"Accept-Charset": "UTF-8,*;q=0.5"}) self.url = "http://www.simsimi.com/func/reqN" self.params = { "lc": "zh", "ft": 0.0, "fl": "http://www.simsimi.com/talk.htm" } self.ready = False self.fetch_kwargs = {} if config.SimSimi_Proxy: self.fetch_kwargs.update(proxy_host=config.SimSimi_Proxy[0], proxy_port=config.SimSimi_Proxy[1]) self._setup_cookie()
def __init__(self, http = None): self.http = http or TornadoHTTPClient() #self.http.debug=True self.result=[] self.statment=[] self.helpkeyword=['?',u'怎么',u'什么',u'鸭子','ee',u'好了','YY','yy',u'神马',u'啊',u'?',u'是么',u'依依',u'EE',u'BSD鸭子',u'能不能',u'多少',u'么'] pass
def __init__(self, qid, pwd, client=None, debug=False, handle_msg_image=True): self.handle_msg_image = handle_msg_image self.http = TornadoHTTPClient() self.http.set_user_agent( "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" " (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 " "Chrome/28.0.1500.71 Safari/537.36") self.http.validate_cert = False self.http.set_global_headers({"Accept-Charset": "UTF-8,*;q=0.5"}) self.http.debug = debug self.qid = qid self.__pwd = pwd self.client = client self.rc = random.randrange(0, 100) self.aid = 1003903 # aid 固定 self.clientid = random.randrange(11111111, 99999999) # 客户端id 随机固定 self.msg_id = random.randrange(11111111, 99999999) # 消息id, 随机初始化 self.daid = 164 self.login_sig = None self.ptwebqq = None self.nickname = u"YouWillNeverGetIt" self.vfwebqq = None self.psessionid = None self.stop_poll = False # 检查是否验证码的回调 self.ptui_checkVC = lambda *r: r # 是否需要验证码 self.require_check = None self.require_check_time = None # 是否开始心跳和拉取消息 self.poll_and_heart = None self.login_time = None self.hThread = None # 验证图片 self.checkimg_path = tempfile.mktemp(".jpg") self._lock_path = tempfile.mktemp() self._wait_path = tempfile.mktemp() self.group_sig = {} # 组签名映射, 用作发送临时消息(sess_message) self.message_interval = 0.5 # 消息间隔 self.last_msg_time = time.time() self.last_msg_content = None self.last_msg_numbers = 0 # 剩余位发送的消息数量 WebQQRequest.hub = self self.connecting = False
def find_next(self): pprint('Start recover cookie') s = TornadoHTTPClient(force_instance = True) with open('cookie.txt') as f: cookie_str = f.read() s.set_global_headers({ 'Cookie': cookie_str }) resp = yield s.get('http://ehire.51job.com/CommonPage/JobsPostNumbList.aspx') pprint('End recover cookie') bs = BeautifulSoup(resp.body, "html.parser") pprint(bs.find('b', {'class': 'info_att'}).text)
def __init__(self, qid, pwd, handler = None): self.qid = qid # QQ 号 self.__pwd = pwd # QQ密码 self.nickname = None # 初始化QQ昵称 self.http = TornadoHTTPClient() self.http.set_user_agent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36") self.http.debug = TRACE self.http.validate_cert = False self.http.set_global_headers({"Accept-Charset": "UTF-8,*;q=0.5"}) self.msg_dispatch = MessageDispatch(self) self.rc = random.randrange(0, 100) self.aid = 1003903 # aid 固定 self.clientid = random.randrange(11111111, 99999999) # 客户端id 随机固定 self.msg_id = random.randrange(11111111, 99999999) # 消息id, 随机初始化 self.require_check = False # 是否需要验证码 self.poll_and_heart = False # 开始拉取消息和心跳 # 初始化WebQQ登录期间需要保存的数据 self.check_code = None self.ptwebqq = None self.require_check_time = None # 需要验证码的时间 self.checkimg_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "check.jpg") self.friend_info = {} # 初始化好友列表 self.group_info = {} # 初始化组列表 self.group_sig = {} # 组签名映射, 用作发送临时消息(sess_message) self.group_members_info = {} # 初始化组成员列表 self.mark_to_uin = {} # 备注名->uin的映射 self.daid = 164 self.login_sig = None self.login_time = None # 登录的时间 self.last_msg_time = time.time() self.last_msg_content = None self.last_msg_numbers = 0 # 剩余位发送的消息数量 self.status_callback = None self.poll_stoped = True # 获取消息是否停止 self.hThread = None # 心跳线程 #self.base_header = {"Referer":"https://d.web2.qq.com/cfproxy.html?v=20110331002&callback=1"} self.base_header = {"Referer":"http://s.web2.qq.com/proxy.html?v=20110412001&callback=1&id=3"}
def __init__(self, qid, pwd): self.qid = qid # QQ 号 self.__pwd = pwd # QQ密码 self.nickname = None # 初始化QQ昵称 self.http = TornadoHTTPClient() self.http.set_user_agent( "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36" ) self.http.debug = DEBUG self.http.validate_cert = False self.http.set_global_headers({"Accept-Charset": "UTF-8,*;q=0.5"}) self.msg_dispatch = MessageDispatch(self) self.rc = random.randrange(0, 100) self.aid = 1003903 # aid 固定 self.clientid = random.randrange(11111111, 99999999) # 客户端id 随机固定 self.msg_id = random.randrange(1111111, 99999999) # 消息id, 随机初始化 self.require_check = False # 是否需要验证码 self.poll_and_heart = False # 开始拉取消息和心跳 # 初始化WebQQ登录期间需要保存的数据 self.check_code = None self.ptwebqq = None self.check_data = None # 初始化检查时返回的数据 self.blogin_data = None # 初始化登录前返回的数据 self.friend_info = {} # 初始化好友列表 self.group_info = {} # 初始化组列表 self.group_sig = {} # 组签名映射, 用作发送临时消息(sess_message) self.group_members_info = {} # 初始化组成员列表 self.hb_time = int(time.time() * 1000) self.daid = 164 self.login_sig = None self.login_time = None # 登录的时间 self.last_group_msg_time = time.time() self.last_msg_content = None self.last_msg_numbers = 0 # 剩余位发送的消息数量 self.base_header = { "Referer": "https://d.web2.qq.com/cfproxy.html?v=20110331002&callback=1" }
def __init__(self, http=None): self.http = http or TornadoHTTPClient() if not http: self.http.set_user_agent( "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36" ) self.http.validate_cert = False self.http.set_global_headers({"Accept-Charset": "UTF-8,*;q=0.5"}) self.url = "rest://www.simsimi.com/func/reqN" self.params = {"lc": "ch", "ft": 0.0} self.ready = False self.fetch_kwargs = {} self.fetch_kwargs.update(proxy_host='192.168.13.19', proxy_port='7777') t = threading.Thread(target=self._setup_cookie()) t.start()
# print 'is match' if type == "g" or type=="s" or type=="b": print 'search' if self.searcher.find(content): result=self.searcher.search(content) if result>=0 : print 'result count:',result return True else: self.content = content return True return False pass if __name__ == "__main__": c=TornadoHTTPClient() #c.start() robot=SmartRobotPlugin(None,None,None,None) #while True: if robot.is_match(111, 'ss?', 'g')==True: data=robot.get_result() print "data:",data,type(data) else: print 'no found' c=TornadoHTTPClient() s=Searcher(c) c.start() #s.baidu_search('ss') c.stop() #
class Command(object): http = TornadoHTTPClient() _sim_try = {} simsimi_proxy = False def url_info(self, url, callback, isredirect=False): """ 获取url信息 Arguments: `url` - 链接 `callback` - 发送消息的回调 `isredirect` - 是否是重定向 """ _url_info = partial(self._url_info, callback=callback, url=url, isredirect=isredirect) self.http.get(url, callback=_url_info) def _url_info(self, resp, callback, url, isredirect=False): """ 读取url_info的回调 """ meta_charset = re.compile( br'<meta\s+http-equiv="?content-type"?' '\s+content="?[^;]+;\s*charset=([^">]+' ')"?\s*/?>|<meta\s+charset="?([^">/"]+' ')"?\s*/?>', re.IGNORECASE) body = "" content = resp.body c_type = resp.headers.get("Context-Type", "text/html") if resp.code in [200]: if c_type == "text/html": charset = meta_charset.findall(content) logging.info("Found charset {0!r} in url {1}".format( charset, url)) if len(charset) == 1 and len(charset[0]) == 2: charset = charset[0][0] if charset[0][0] else charset[0][1] else: charset = "" if charset.lower().strip() == "gb2312": charset = "gbk" if charset: ucont = content.lower().decode(charset).encode( "utf-8").decode("utf-8") else: ucont = content.lower().decode("utf-8") parser = etree.HTML(ucont) title = parser.xpath(u"//title") title = title[0].text if len(title) >= 1 else None if title: body += u"网页标题: " + title.replace("\r", "").replace( "\n", "") if isredirect: body += u"(重定向到:{0})".format(url) elif resp.code in [302, 301]: dst = resp.headers.get("Location") self.url_info(dst, callback, True) else: body = u"({0} {1} {2})".format(url, resp.code, httplib.responses[resp.code]) if body: callback(body) def _eurl_info(self, errcode, errmsg, url, callback): """ 处理url_info错误 """ body = u"({0} {1})".format(url, errmsg) callback(body) def py(self, code, callback): """ 执行Python代码 Arguments: `code` - 要执行的代码 `callback` - 发送消息的回调 """ url = "http://pythonec.appspot.com/run" #url = "http://localhost:8080/run" params = [("code", code.encode("utf-8"))] read_py = partial(self.read_py, callback=callback) self.http.post(url, params, callback=read_py) def read_py(self, resp, callback): """ 读取执行Python代码的返回 """ data = resp.body try: result = json.loads(data) status = result.get("status") if status: content = u"OK: " + result.get("out") else: content = u"ERR: " + result.get("err") except ValueError: logging.warn(traceback.format_exc()) content = u"我出错了, 没办法执行, 我正在改" callback(content) def shell(self, session, statement, callback): """ 实现Python Shell Arguments: `session` - 区别用户的shell `statement` - Python语句 `callback` - 发送结果的回调 """ if statement.strip() in ["cls", "clear"]: url = "http://pythonec.appspot.com/drop" params = [ ("session", session), ] else: url = "http://pythonec.appspot.com/shell" #url = "http://localhost:8080/shell" params = [("session", session), ("statement", statement.encode("utf-8"))] def read_shell(resp, callback): data = resp.body if not data: data = "OK" callback(data.decode("utf-8")) return callback = partial(read_shell, callback=callback) self.http.get(url, params, callback=callback) def paste(self, code, callback, typ="text"): """ 贴代码 """ url = "http://paste.linuxzen.com" params = [("class", typ), ("code", code.encode("utf-8")), ("paste", "ff")] callback = partial(self.read_paste, oldurl=url, callback=callback) self.http.post(url, params, callback=callback) def read_paste(self, resp, oldurl, callback): """ 读取贴代码结果, 并发送消息 """ if resp.code == 302: url = resp.headers.get("Location") else: url = resp.effective_url if url != oldurl: content = url callback(content) def teach(self, say, response): url = "http://paste.linuxzen.com/bot/teach" params = (("say", say.encode("utf-8")), ("res", response.encode("utf-8"))) logging.info(u"Teach our bot {0}/{1}".format(say, response)) self.http.get(url, params) def talk(self, say, callback): url = "http://paste.linuxzen.com/bot/talk" params = (("say", say.encode("utf-8")), ) def callback(resp): data = resp.body r = json.loads(data) if r.get("status"): callback(r.get("response")) else: self.simsimi(say, callback) self.http.get(url, params, callback=callback) def simsimi(self, content, callback): """ simsimi 小黄鸡 """ msg_url = "http://www.simsimi.com/func/req" msg_params = (("msg", content.encode("utf-8")), ("lc", "ch")) headers = { "Referer": "http://www.simsimi.com/talk.htm?lc=ch", "X-Requested-With": "XMLHttpRequest" } def read_simsimi(resp): result = resp.body if result: try: response = json.loads(result) res = response.get("response") if is_black_msg(res): return self.simsimi(content, callback) if not res or (res and res.startswith("Unauthorized access!.")): if not self._sim_try.has_key(content): self._sim_try[content] = 0 if self._sim_try.get(content) < 10: logging.warn( "SimSimi error with response {0}".format(res)) self._sim_try[content] += 1 self.simsimi(content, callback) else: self._sim_try[content] = 0 callback(u"T^T ip被SimSimi封了, 无法应答") return else: self._sim_try[content] = 0 callback(res) self.teach(content, res) except ValueError: logging.warn(traceback.format_exc()) logging.warn( "SimSimi error with response {0}".format(result)) #self.simsimi(content, callback) callback(u"呵呵") kw = {"headers": headers, "callback": read_simsimi} if SimSimi_Proxy: kw.update(proxy=SimSimi_Proxy) self.http.get(msg_url, msg_params, **kw) def cetr(self, source, callback, web=False): """ 调用有道接口进行英汉互译 """ key = YOUDAO_KEY keyfrom = YOUDAO_KEYFROM source = source.encode("utf-8") url = "http://fanyi.youdao.com/openapi.do" params = [("keyfrom", keyfrom), ("key", key), ("type", "data"), ("doctype", "json"), ("version", 1.1), ("q", source)] callback = partial(self.read_cetr, callback=callback, web=web) self.http.get(url, params, callback=callback) def read_cetr(self, resp, callback, web): """ 读取英汉翻译的结果 """ """ try: buf = StringIO(source) with gzip.GzipFile(mode = "rb", fileobj = buf) as gf: data = gf.read() except: logging.warn(traceback.format_exc()) data = source """ try: result = json.loads(resp.body) except ValueError: logging.warn(traceback.format_exc()) body = u"error" else: errorCode = result.get("errorCode") if errorCode == 0: query = result.get("query") r = " ".join(result.get("translation")) basic = result.get("basic", {}) body = u"{0}\n{1}".format(query, r) phonetic = basic.get("phonetic") if phonetic: ps = phonetic.split(",") if len(ps) == 2: pstr = u"读音: 英 [{0}] 美 [{1}]".format(*ps) else: pstr = u"读音: {0}".format(*ps) body += u"\n" + pstr exp = basic.get("explains") if exp: body += u"\n其他释义:\n\t{0}".format(u"\n\t".join(exp)) if web: body += u"\n网络释义:\n" web = result.get("web", []) if web: for w in web: body += u"\t{0}\n".format(w.get("key")) vs = u"\n\t\t".join(w.get("value")) body += u"\t\t{0}\n".format(vs) if errorCode == 50: body = u"无效的有道key" if not body: body = u"没有结果" callback(body) def send_msg(self, msg, callback, nick=None): if len(msg) <= MAX_LENGTH: body = nick + msg if nick else msg callback(body) else: callback = partial(self.send_msg, callback=callback, nick=nick) self.paste(msg, callback)
def setUp(self): self.http = TornadoHTTPClient() self.http.debug = True
def setUp(self): super(TornadoHTTPClientCoroutineTest, self).setUp() self.http = TornadoHTTPClient() self.http.debug = True
def __init__(self, message_bus): self._message_bus = message_bus # 消息总线 self._logger = get_logger() # 日志 self._http_stream = TornadoHTTPClient() self._honor = Honor()
if (content.startswith("<") and content.endswith(">")) or\ (content.startswith(u"《") and content.endswith(u"》")): self._name = content.strip("<").strip(">").strip(u"《")\ .strip(u"》") if not self._name.strip(): return False if self.douban is None: self.douban = DoubanReader(self.http) return True return False def handle_message(self, callback): self.douban.search(self._name, callback) if __name__ == "__main__": from tornadohttpclient import TornadoHTTPClient def cb(b): print b douban = DoubanReader(TornadoHTTPClient()) douban.search(u"百年孤独", cb) douban.search(u"鸟哥的私房菜", cb) douban.search(u"论语", cb) douban.search(u"寒战", cb) douban.search(u"阿凡达", cb) douban.search(u"创战记", cb) douban.search(u"简单爱", cb) TornadoHTTPClient().start()
def find(self): pprint('Into tornadohttpclient') s = TornadoHTTPClient(force_instance = True) pprint('Start login') f = yield s.get('http://ehire.51job.com') soup = BeautifulSoup(f.body, "html.parser") hidAccessKey = soup.find('input', {'name': 'hidAccessKey'})['value'] fksc = soup.find('input', {'name': 'fksc'})['value'] hidEhireGuid = soup.find('input', {'name': 'hidEhireGuid'})['value'] headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Content-Type': 'application/x-www-form-urlencoded', 'Origin': 'http://ehire.51job.com', 'Referer': 'http://ehire.51job.com/MainLogin.aspx', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36' } data = {'ctmName': '大岂网络', 'userName': '******', 'password': '******', 'oldAccessKey': hidAccessKey, 'langtype': 'Lang=&Flag=1', 'sc': fksc, 'ec': hidEhireGuid, 'isRememberMe': 'True' } res = yield s.post('https://ehirelogin.51job.com/Member/UserLogin.aspx', data=data, headers=headers) pprint('End login') pprint('Start force') try: soup = BeautifulSoup(res.body, "html.parser") viewState = soup.find('input', {'name': '__VIEWSTATE'})['value'] partURL = soup.find('form', {'id': 'form1'})['action'] URL = 'http://ehire.51job.com/Member/' + partURL headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Content-Type': 'application/x-www-form-urlencoded', 'Origin': 'http://ehire.51job.com', 'Referer': URL, 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36' } data = {'__EVENTTARGET': 'gvOnLineUser', '__EVENTARGUMENT': 'KickOut$0', '__VIEWSTATE': viewState } res = yield s.post(URL, data=data, headers=headers) except: pass # 有时不需要下线 pprint('End force') pprint('Start fetch remain') resp = yield s.get('http://ehire.51job.com/CommonPage/JobsPostNumbList.aspx') pprint('End fetch remain') bs = BeautifulSoup(resp.body, "html.parser") pprint(bs.find('b', {'class': 'info_att'}).text) pprint('###Cookie###') pprint(s.cookie) with open('cookie.txt', 'w') as f: f.write(s.cookie)
#!/usr/bin/env python #coding=utf8 from tornado import gen from tornado.ioloop import IOLoop from tornadohttpclient import TornadoHTTPClient import json # 实例化 http = TornadoHTTPClient() @gen.coroutine def get(): headers = dict((("content-type","application/json"),("Accept-Charset","utf8"),("Authorization","token F017254EAF208C462C8D4ABCBC27F1DD7CB8DA65FF70B063CF16E90AA35BAE7FAF360C87D0617ED7723DC64FC8CA6A47438F5BED9FC60C303DF3AFAAE2C44A8FAE961E8999B43C820615D9489DA0AB178368A3F9CA7640CA755283A67E8D9CC13DA55AFD48606621E37C601A52E64C94530C92D468CF5A72DE68C0F7230103F400A855997086CE4E4E357BB887D0B08C6D5238EA6B5487E0231A10B38650FEE92D14264704D3FC1C80AC6675612E41C17A73D9283470A0C1FBB8C089106169AB6C179C296D073F09FDB1822646AE5B76D458CC433C1F4829AC2DACE160F851188951ED2BF00CA6E4AA53CFCC659C100F53669EB2C9F4DDAA5BBB1C5D8E98EFB720C94AA3") )) # 发出get请求 # response = yield #http.post("http://ipsapro.isoftstone.com:8081/api/user/login",'{"strUser":"******","strPwd":"e10adc3949ba59abbe56e057f20f883ee10adc3949ba59abbe56e057f20f883e"}',headers=headers) response = yield http.post("http://ipsapro.isoftstone.com:8081/api/Department/GetDepartment",'',headers=headers); # print(response.body) fo = open("department.txt", "wb") #j=json.loads(response.body) #str_json=json.dumps(j['departments'],encoding="gbk",ensure_ascii=False) str_json=response.body fo.write(str_json) IOLoop.instance().run_sync(get)