python实现的登陆Discuz!论坛通用代码分享


Posted in Python onJuly 11, 2014

代码如下:

#coding:gbk
import urllib2,urllib,cookielib,re

'''
 通用的登陆DZ论坛
 参数说明parms:
   username:用户名(必填),
   password :密码(必填),
   domain:网站域名,注意格式必须是:http://www.xxx.xx/(必填),
   answer:问题答案,
   questionid:问题ID,
   referer:跳转地址
   
 这里使用了可变关键字参数(相关信息可参考手册)
'''
def login_dz(**parms):

  #初始化
  parms_key = ['domain','answer','password','questionid','referer','username']
  arg = {}
  for key in parms_key:
    if key in parms:
      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)
  if not formhash:
    raise Exception('GET formhash Fail!')
  formhash = formhash.group(1)

  #登陆
  postdata = {
   'answer':arg['answer'],
   'formhash':formhash,
   'password':arg['password'],
   'questionid':0 if arg['questionid']=='' else arg['questionid'],
   'referer':arg['domain'] if arg['referer']=='' else arg['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' in c:
    flag = True
  return flag


#使用例子:基本参数登陆
user='xxx'
pwd='xxx'
dom='http://www.discuz.net/' #另一个测试网站:http://bbs.3water.com/
try:
  flag = login_dz(username=user,password=pwd,domain=dom)
  print(flag)
except Exception,e:
  print('Error:',e)
Python 相关文章推荐
详细介绍Python语言中的按位运算符
Nov 26 Python
在Python的Tornado框架中实现简单的在线代理的教程
May 02 Python
使用SAE部署Python运行环境的教程
May 05 Python
python实现在控制台输入密码不显示的方法
Jul 02 Python
Python操作csv文件实例详解
Jul 31 Python
对python3 一组数值的归一化处理方法详解
Jul 11 Python
Python中print和return的作用及区别解析
May 05 Python
Python计算一个点到所有点的欧式距离实现方法
Jul 04 Python
Django Admin中增加导出CSV功能过程解析
Sep 04 Python
python求质数列表的例子
Nov 24 Python
在keras下实现多个模型的融合方式
May 23 Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 Python
Python Socket编程入门教程
Jul 11 #Python
python使用正则搜索字符串或文件中的浮点数代码实例
Jul 11 #Python
Python实现的二维码生成小软件
Jul 11 #Python
让python同时兼容python2和python3的8个技巧分享
Jul 11 #Python
Python操作SQLite简明教程
Jul 10 #Python
Python读取图片EXIF信息类库介绍和使用实例
Jul 10 #Python
Python采集腾讯新闻实例
Jul 10 #Python
You might like
PHP树的代码,可以嵌套任意层
2006/10/09 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
JS实现仿微博可关闭弹出层效果
2015/09/21 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
JS typeof fn === 'function' && fn()详解
2020/08/22 Javascript
python求pi的方法
2014/10/08 Python
简单学习Python time模块
2016/04/29 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
Python基本socket通信控制操作示例
2019/01/30 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
生产车间实习自我鉴定
2013/09/23 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
测试工程师职业规划书
2014/02/06 职场文书
《夹竹桃》教学反思
2014/04/20 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
公民授权委托书范本
2014/09/17 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript