def _get_profile(self): usernumber = self._get_cookie_usernumber() if usernumber is None: self._logger.error("Cannot get user number from cookie!") return sid = self._get_cookie_sid() if sid is None: self._logger.error("Cannot get sid from cookie!") return cguid = self._get_cookie_cguid() userinfo_url = 'https://smsrebuild1.mail.10086.cn/addrsvr/QueryUserInfo' \ '?sid={}&formattype=json&cguid={}'.format(sid, cguid) payload = '<QueryUserInfo><UserNumber>86{}</UserNumber></QueryUserInfo>'.format( usernumber) payload = payload.encode('ascii') headers = { 'accept': "*/*", 'accept-encoding': "gzip, deflate, br", 'accept-language': "zh-CN,zh;q=0.9", 'cache-control': "no-cache", 'cookie': self.task.cookie, 'pragma': "no-cache", 'referer': "https://smsrebuild1.mail.10086.cn//proxy.htm", 'origin': 'https://smsrebuild1.mail.10086.cn', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/70.0.3538.102 Safari/537.36", } try: response_text = requests.request("POST", userinfo_url, data=payload, headers=headers).text QueryUserInfoResp = re.search(r'QueryUserInfoResp=(.*)', response_text).group(1) userinfo_json = json.loads(QueryUserInfoResp) if userinfo_json["ResultCode"] == '0' and userinfo_json[ "ResultMsg"] == 'successful': userinfo = userinfo_json.get('UserInfo')[0] self._userid = usernumber + '@139.com' profile = PROFILE(self._clientid, self.task, self.task.apptype, self._userid) profile.nickname = userinfo['c'] if 'c' in userinfo else None gender_dict = { '0': EGender.Male, '1': EGender.Female, '2': EGender.Unknown } profile.gender = gender_dict[ userinfo['f']] if 'f' in userinfo else None if 'g' in userinfo and 'h' in userinfo and 'j' in userinfo and 'k' in userinfo: profile.address = userinfo['g'] + userinfo['h'] + userinfo[ 'j'] + userinfo['k'] profile.phone = userinfo['p'] if 'p' in userinfo else None profile.birthday = userinfo['o'] if 'o' in userinfo else None profile.email = userinfo['y'] if 'y' in userinfo else None yield profile # re_proinfo = re.compile('var addrQueryUserInfo = (.*?);') # proinfo = re_proinfo.search(self._html).group(1) # jsondata = json.loads(proinfo) # userinfo = jsondata.get('UserInfo')[0] # id = userinfo.get('y') # self._userid = id # name = userinfo.get('un') # profile = PROFILE(self._clientid, self.task, self.task.apptype, self._userid) # profile.nickname = name # yield profile except: self._logger.error( f"Download 10086 profile error,err:{traceback.format_exc()}")
def _get_profile(self): self._headers['Cookie'] = self.task.cookie try: html = self._ha.getstring(self._indexurl, headers=""" Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Cache-Control: no-cache Connection: keep-alive Pragma: no-cache Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: none Sec-Fetch-User: ?1 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36""" ) # indexres = requests.get(self._indexurl, headers=self._headers) # index_text = indexres.text self.__get_userid(html) unixtime = int( datetime.now(pytz.timezone('Asia/Shanghai')).timestamp() * 1000) pindex = 'https://mail.tom.com/webmail/preference/getUserProfile.action' formdata = {'_ts': str(unixtime)} # r = requests.post(pindex, headers=self._headers, data=formdata) html = self._ha.getstring(pindex, req_data='', json=formdata, headers=""" Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Cache-Control: no-cache Connection: keep-alive Pragma: no-cache Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: none Sec-Fetch-User: ?1 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36""" ) if html is None or html == "": profile = PROFILE(self._clientid, self.task, self.task.apptype, self._userid) yield profile else: prodata = json.loads(html).get('result', {}) if len(prodata) == 0: return profile = PROFILE(self._clientid, self.task, self.task.apptype, self._userid) profile.birthday = prodata.get('birthday') profile.nickname = prodata.get('name') gender = prodata.get('gender') if gender is not None: if gender == '2': profile.gender = EGender.Male elif gender == '3': profile.gender = EGender.Female profile.region = prodata.get('province') profile.address = prodata.get('city') profile.phone = prodata.get('mobileNumber') yield profile except Exception: self._logger.error("Get profile error, err: {}".format( traceback.format_exc())) return