def login(self, verify_code='<STR_LIT>'):
url = '<STR_LIT>'<EOL>payload = {<EOL>'<STR_LIT:username>': self.__username,<EOL>'<STR_LIT>': self.__password,<EOL>'<STR_LIT>': verify_code,<EOL>'<STR_LIT:f>': '<STR_LIT>',<EOL>}<EOL>headers = {<EOL>'<STR_LIT>': '<STR_LIT>',<EOL>'<STR_LIT>': '<STR_LIT>',<EOL>'<STR_LIT>': self.__cookies,<EOL>}<EOL>r = requests.post(url, data=payload, headers=headers)<EOL>s = re.search(r'<STR_LIT>', r.text)<EOL>if not s:<EOL><INDENT>try:<EOL><INDENT>error_code = json.loads(r.text)['<STR_LIT>']['<STR_LIT>']<EOL><DEDENT>except (KeyError, ValueError):<EOL><INDENT>raise LoginError(r.text)<EOL><DEDENT>if error_code in [-<NUM_LIT:8>, -<NUM_LIT>]:<EOL><INDENT>raise LoginVerifyCodeError(r.text)<EOL><DEDENT>elif re.search(r'<STR_LIT>', r.text):<EOL><INDENT>raise LoginError('<STR_LIT>')<EOL><DEDENT>else:<EOL><INDENT>raise LoginError(r.text)<EOL><DEDENT><DEDENT>self.__token = int(s.group(<NUM_LIT:1>))<EOL>self.__cookies = '<STR_LIT>'<EOL>for cookie in r.cookies:<EOL><INDENT>self.__cookies += cookie.name + '<STR_LIT:=>' + cookie.value + '<STR_LIT:;>'<EOL><DEDENT>
登录微信公众平台
注意在实例化 ``WechatExt`` 的时候，如果没有传入 ``token`` 及 ``cookies`` ，将会自动调用该方法，无需手动调用
当且仅当捕获到 ``NeedLoginError`` 异常时才需要调用此方法进行登录重试
:param verify_code: 验证码, 不传入则为无验证码
:raises LoginVerifyCodeError: 需要验证码或验证码出错，该异常为 ``LoginError`` 的子类
:raises LoginError: 登录出错异常，异常内容为微信服务器响应的内容，可作为日志记录下来