python实现的登陆Discuz!论坛通用代码分享
代码如下:
#coding:gbk
importurllib2,urllib,cookielib,re
'''
通用的登陆DZ论坛
参数说明parms:
username:用户名(必填),
password:密码(必填),
domain:网站域名,注意格式必须是:http://www.xxx.xx/(必填),
answer:问题答案,
questionid:问题ID,
referer:跳转地址
这里使用了可变关键字参数(相关信息可参考手册)
'''
deflogin_dz(**parms):
#初始化
parms_key=['domain','answer','password','questionid','referer','username']
arg={}
forkeyinparms_key:
ifkeyinparms:
arg[key]=parms[key]
else:
arg[key]=''
#cookie设置
cookieFile='./kan_cookies.dat'
cookie=cookielib.LWPCookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
#获取formhash
pre_login=arg['domain']+'member.php?mod=logging&action=login&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login'
c=opener.open(pre_login).read()
cookie.save(cookieFile)
patt=re.compile(r'.*?name="formhash".*?value="(.*?)".*?')
formhash=patt.search(c)
ifnotformhash:
raiseException('GETformhashFail!')
formhash=formhash.group(1)
#登陆
postdata={
'answer':arg['answer'],
'formhash':formhash,
'password':arg['password'],
'questionid':0ifarg['questionid']==''elsearg['questionid'],
'referer':arg['domain']ifarg['referer']==''elsearg['referer'],
'username':arg['username'],
}
postdata=urllib.urlencode(postdata)
req=urllib2.Request(
url=arg['domain']+'member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LCaB3&inajax=1',
data=postdata
)
c=opener.open(req).read(300)
flag='登陆失败%s'%arg['username']
if'succeedhandle_login'inc:
flag=True
returnflag
#使用例子:基本参数登陆
user='xxx'
pwd='xxx'
dom='http://www.discuz.net/'#另一个测试网站:http://bbs.jb51.net/
try:
flag=login_dz(username=user,password=pwd,domain=dom)
print(flag)
exceptException,e:
print('Error:',e)