python discuz_pythonDiscuz发帖器的实现

网络技术需要大家共同分享,不能闭门造车,下面是bj-dnsCom提示:首先要清楚discuz论坛发帖的流程,简单地说就是以下流程:进入登录页 ->登录 -> 进入版面 ->发帖

首先要清楚discuz论坛发帖的流程,简单地说就是以下流程:

进入登录页 ->登录 -> 进入版面 ->发帖

登录和发帖时要获取到页面的formhash值,否则会失败,如果启用了验证码,还得去分析验证码,这就比较复杂了。这里只用python来描述这一系列过程,涉及到验证码还请大家自行去实现。

#!/usr/bin/env python#coding=utf-8from urllib import urlencodeimport cookielib, urllib2,urllibimport os,sysimport urllib2,cookielib,urllib,httplib,reimport getpassimport timefrom Queue import Queueimport threadingclass Discuz:def __init__(self,uid,pwd,debug = False,**param):self.username = uidself.password = pwdself.para = param#self.timelimit = timelimitself.regex = {loginreg:,postreg:}self.opener = Noneself.request = Noneself.islogin = Falseself.donecount = 0self.__login()self.threadcount = 10def __login(self):try:loginPage = urllib2.urlopen(self.para[loginurl]).read()formhash = re.search(self.regex[loginreg],loginPage)formhash = formhash.group(1)print start login......cookiejar = cookielib.CookieJar()self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))values = {formhash:formhash,username:self.username,password:self.password,loginsubmit:true}data = urllib.urlencode(values)self.request = urllib2.Request(self.para[loginsubmiturl], data)rq = self.opener.open(self.request)print login success......self.islogin = Trueexcept Exception ,e:print edef Post(self,subject,wysiwyg,content):threads = []for i in range(self.threadcount):t = threading.Thread(target=self.__postTopic,kwargs={_subject:subject,_wysiwyg:wysiwyg,_body:content})threads.append(t)for i in range(self.threadcount):threads[i].start()for i in range(self.threadcount):threads[i].join()print donedef __postTopic(self,**para):if not self.islogin:print please login......returnwhile True:try:self.request = urllib2.Request(self.para[posturl])rq = self.opener.open(self.request)data = rq.read()formhash = re.search(self.regex[postreg],data)formhash = formhash.group(1)postdata = {addtags:+可用标签,checkbox:0,formhash:formhash,iconid:,message:para[_body],subject:para[_subject],tags:,updateswfattach : 0,wysiwyg : para[_wysiwyg]}self.request = urllib2.Request(self.para[postsubmiturl],urllib.urlencode(postdata))self.opener.open(self.request)self.donecount+=1print %d done..... % self.donecountexcept Exception,e:print etime.sleep(2)if __name__==__main__:name = raw_input(username:)password = getpass.getpass(password:)dz = Discuz(name,password,loginurl=http://xxx/logging.php?action=login,loginsubmiturl=http://xxx/logging.php?action=login&loginsubmit=yes,posturl=http://xxx/post.php?action=newthread&fid=5,postsubmiturl=http://xxx/post.php?&action=newthread&fid=5&extra=&topicsubmit=yes)content=这是帖子内容dz.Post(这是帖子内容,1,content)

Discuz类中只有一个公开方法

def Post(self,subject,wysiwyg,content)

三个参数,分别是帖子标题、是否是可视化编辑、帖子内容。

类实例化时会进行登录操作,并同时记录下cookie以备用,Post方法中会启用多个线程执行私有方法__postTopic(self,**para)进行真正的发帖操作。

所以,基本上Discuz生成的formhash就是一个鸡肋 -_-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于linux的业设计课题,基于linux下智能手机的设计与制作 毕业设计.doc

本科生毕业论文(设计)题 目: 基于linux下智能手机的设计与制作目录1. 绪论11.1 嵌入式系统的应用前景11.2linux操作系统21.2.1Linux介绍22.硬件、软件介绍32.1S3c2440知识32.1.1S3c2440系统结构介绍32.1.2arm实验仪介绍72.2 GPRS无线模组92.2.1 GPRS概述及工作原理9…

excel文件导入hive乱码_将excel中的数据导入hive

步骤一:将excel另存为txt文档(文本文件(制表符分割))假设名字为CompanyCode.txt步骤二,将该txt文件导入Linux指定目录中步骤三,转换编码格式,在指定目录下执行如下命令:piconv -f gb2312 -t UTF-8 CompanyCode.txt &g…

传统的6d位姿估计fangfa1_李飞飞团队最新论文:基于anchor关键点的类别级物体6D位姿跟踪...

点击上方“3D视觉工坊”,选择“星标”干货第一时间送达简介作者提出了一种基于RGB-D的深度学习方法6PACK,能够实时的跟踪已知类别物体。通过学习用少量的3D关键点来简洁地表示一个物体,基于这些关键点,通过关键点匹配来估计物体在…

c语言的程序结构语序,第3章 C语序结构.doc

第3章 C语序结构第三章 基本语句本章要求:1.表达式语句,空语句,复合语句2.数据的输入与输出,输入,输出函数的调用C语句概述C程序的执行部分是由语句组成的。 程序的功能也是由执行语句实现的。3.1 赋值语句赋值语句: 是由赋值表达式再加上分号构成的表达…

安卓system镜像分区_玩机爱好者想要的PT分区到底是什么?可以使现有的安卓系统更快!...

小编第一次看见PT分区这个词。就比较好奇他到底是什么神仙技术。今天,小编给大家科普一下,可能小编理解的也不是特别准确,请各位谅解!! 欢迎关注小编。各位玩机爱好者总是沉浸在各种ROM包、第三发Rec,以及各…

计算器软件C语言课程设计实验报告,c简单计算器实验报告_相关文章专题_写写帮文库...

时间:2019-05-15 12:55:15 作者:admin计算器实验报告班级: 07计本(1)班姓名: 王林学号: 20706031047指导老师: 韩静一、 需求分析(1)制作一个计算器界面工程,有数字运算符等键,输入表…

python求和1到100_python等差数列求和公式前 100 项的和实例

python等差数列求和公式前 100 项的和实例 最近跑去学了下python,一个很简单的题,结果发现数学公示忘了,在不用for循环的情况下居然有些懵,记录为下.. 题:等差数列可以定义为每一项与它的前一项的差等于一个常数,可以用…

android mqtt详解_Android mqtt入门 Android studio(转)

Android mqtt入门 Android studio2018年04月09日 14:02:30 hbw020 阅读数:1564分享 mqtt简单使用介绍:1、as创建工程2、官网下载mqtt支持包放入lib文件,点击打开链接,https://repo.eclipse.org/content/repositories/paho-release…

jupyter kernel_新乡联通案例分享:Jupyter开发环境配置的常用技巧

Jupyter开发环境配置的常用技巧新乡联通网管中心 邢少华Python开发环境中,大部分人使用的是Jupyter,在Jupyter中有几个令人困扰的问题:1. Jupyter的默认打开目录如何修改2. Jupyter默认使用的浏览器如何修改3. 好用的Jupyter插件如何安装4.…

东北大学c语言及程序设计,东大20秋学期《C语言及程序设计》在线平时作业1参考...

20秋学期《C语言及程序设计》在线平时作业1( j- V: Z* f0 i V& k% b, S. ?/ _8 ~1.[单选题] 在C语言中,引用数组元素时,其数组下标的数据类型允许是()。2 6 g, p1 C$ P; B$ _( J附件是答案,核对题目下载4 m1 F; D: R* q; AA.整型常量- _…

mac安装ipython_Mac下安装ipython与jupyter

IPython从Python发展而来,更倾向于科学计算。互联网数据分析更喜欢用。首先切换root用户:sudo su -pip3自动安装ipythonMacBook-Pro:~ root# pip3 install ipython自动安装完成后建立软连接,方便使用MacBook-Pro:bin root# ln -s /Library/Fr…

二叉树 中序遍历 python_LeetCode 105 树 从前序与中序遍历序列构造二叉树(Medium)

17(105) 从前序与中序遍历序列构造二叉树(Medium)描述根据一棵树的前序遍历与中序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。示例例如,给出前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 1…

c语言删除双向链表重复元素,求一个双向链表的建立,插入删除的c语言程序完整版的,借鉴一下思想,再多说一下就是能运行的那种...

最佳答案//链表的操作编辑//线性表的双向链表存储结构typedef struct DuLNode{ElemType data;struct DuLNode *prior,*next;}DuLNode,*DuLinkList;////带头结点的双向循环链表的基本操作void InitList(DuLinkList L){ /* 产生空的双向循环链表L */L(DuLinkList)malloc(sizeof(D…

华为p10和p10plus区别_华为p10和p10plus哪个好 华为p10与p10plus区别对比【图文】

华为p10与p10plus是华为在2017年的首发旗舰手机,作为颜值与配置都很亮眼的华为p10与p10plus自然成了大众的焦点,当然也就避不可免的用来对比。究竟华为p10和p10plus哪个好?下面小编就来给大家讲讲华为p10与p10plus的区别对比。华为P10与P10 Plus区别对比…

python数学圆周率_Python编程超简单方法算圆周率

我们都知道,圆周率是3.1415926也就是π,但你有没有想过,圆周率是怎么算出来的呢? 这个是德国数学家莱布尼兹发明的算圆周率的方法,公式为:π4(1-1/31/51/71/9-1/11……),其中,分母每…

计算payload长度c语言,C语言0长度数组(可变数组/柔性数组)详解

1 零长度数组概念众所周知, GNU/GCC 在标准的 C/C 基础上做了有实用性的扩展, 零长度数组(Arrays of Length Zero) 就是其中一个知名的扩展.多数情况下, 其应用在变长数组中, 其定义如下struct Packet{ int state; int len; char cData[0]; //这里的0长结构体就为变长结构体提供…

iphone主屏幕动态壁纸_iPhone8怎么设置动态壁纸?iPhone8动态壁纸设置教程

iPhone8怎么设置动态壁纸?朋友们平时想把一些拍摄的动态图片设置iPhone8壁纸,该怎么设置呢?估计有 不少朋友还不知道如何设置, 在这里我就来为大家介绍一下iPhone8设置动态壁纸的教程,一起来看一看吧!iPhone8动态壁纸设置教程首先打开iPhon…

python封装介绍_谈python3的封装

这章给大家介绍,如何封装一个简单的python库首先创建一个以下型式的文件结构rootFile/setup.pyexample_package/__init__.pyexample_module.pyexample_package2/__init__.pyexample_module.py其中的两个__init__.py可以是一个空文件,但是它是导入package…

go语言调用c 的头文件 so,golang 学习(10): 使用go语言调用c语言的so动态库-Go语言中文社区...

一、前言最近在学习go,因为需要调用c语言打包成的so动态库里面的方法,避免自己再去造轮子,所以想直接使用golang调用so,但是参考了其他博客大佬写的,我每一步原封不动的写下来,结果都是一堆错误&#xff0c…

log nginx 客户端请求大小_Nginx日志分析和参数详解

本文档主要介绍Nginx设置日志参数的作用,以及Nginx日志常用分析命令基本大纲:1.Nginx日志记录格式的介绍2.Nginx日志参数详解3.Web服务流量名词介绍4.Nginx日志常用分析命令示范一:Nginx日志记录格式的介绍log_format用来设置日志的记录格式&…