Example #1
0
    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()}")
Example #2
0
 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