日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python discuz_pythonDiscuz发帖器的实现

發布時間:2025/3/8 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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就是一個雞肋 -_-

總結

以上是生活随笔為你收集整理的python discuz_pythonDiscuz发帖器的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。