现在很多论坛都是使用现成的 powerd by discuz 7.2,虽说 readme 里声明不是免费软件,但是也没看到要收费的地方,对小公司而言,要搭建一个 BBS 论坛,Linux + Apache + Mysql + PHP + Discuz 无疑是很不错的选择,上手容易,配置也不复杂。
上一帖给出了在discuz的论坛上自动发帖的代码,这里介绍一下它的基本原理吧。(参见附件的图片)
这是个 GET 请求,请求页面 http://192.168.72.130/bbs/logging.php?action=login,服务端返回 sid 和 formhash,其中 sid 是会话的 ID,在返回的 Cookie 中,读取头部的 Set-Cookie 部分即可,sid 每次请求页面,值都不一样;formhash 在返回的文本文件中,如果在浏览器中直接输入:http://192.168.72.130/bbs/logging.php?action=login,可以看到登录界面,查看-源文件,找到登录的那个表单 form ,其中的 input 就有 formhash,type=hidden,隐藏不可见,formhash的值为8位的字母数字搭配,这是服务器返回给客户端的身份标识,具体算法好像是根据时间戳等信息,求MD5后,取其中8位,具体细节参照 discuz 的 PHP 源码吧。
有了 formhash 就可以登录了,其实登录的目的就是为了获得 auth 值,auth 值是通过服务器返回的 Cookie 中获得的。登录的过程是发送 POST 请求,首先要将 sid 写入 Cookie 中,POST 的内容可以通过在 URL 中传输,或是在 POST 的文本内容中,传递的参数有 action, loginfield, questionid, answer, loginsubmit, formhash, username, password 等,相互之间用 & 连接,这些参数在登录界面的源代码里都可以找到,具体内容可以参考代码:
"action=login&loginfield=username&questionid=0&answer=&loginsubmit=yes&formhash="
+ login_formhash
+ "&username="
+ user
+ "&password=" + pass
其实以上过程就是模拟浏览器,发送 POST 请求,点击“登录”按钮的时候,浏览器完成以上动作,这里由代码自动完成。
此时,服务器就认可了用户已经登录,将会保存用户已登录的信息,服务端回应的 Cookie 中,包含了 auth 值,需要从 Cookie 中提取并保存,作为用户的身份标识,用作后续的发帖身份认证。
登录到服务器后,要进行发帖操作,需要得到一个 formhash 标识,通过 GET 请求页面 http://192.168.72.130/bbs/post.php?action=newthread&fid=10 ,其中包含了 fromhash 值,这个请求要包含 sid 和 auth 的 Cookie,其中 fid=10 意为版块的 ID ,可以通过登录具体的版块发帖,鼠标放在“发帖”按钮上,浏览器状态栏会显示 ID 号,或者在发帖页面,查看源文件,找到发帖的表单 form ,查看这个 ID 号。
服务器返回的内容中,会有个表单,包含 formhash 值,至此,就可以进行发帖操作了。
发帖操作和登录操作类似,通过 POST 请求页面 http://192.168.72.130/bbs/post.php,同样需要把 Cookies 的内容加上;具体 POST 的内容,可以参考发帖操作页面的源代码,其中 form 的内容就是要 POST 的内容。可以参考如下:
"action=newthread&topicsubmit=yes&subject=" + subject
+ "&formhash=" + post_formhash + "&fid=" + new_fid
+ "&message=" + msg
服务器会返回发帖的结果,所以有必要接受服务返回的内容,用来测试是否发帖成功。具体功能就不实现了。
至此,自动发帖的原理就介绍完了。
基本的过程就是,GET 请求登录页面,Cookie 中获得 sid ,返回页面中获得 formhash,用 sid formhash username ... 等信息,发送 POST 请求登录,登录后 Cookie 中会有 auth 等信息,取得 auth 后,GET 请求发帖页面,在页面中获得 formhash ,再以 sid auth ...等发送 POST 请求,完成发帖操作。
如果有笔误或讲得不对的地方,请网友指教。
附上 wireshark 网络抓包的部分内容,供参考。
Expert Info (Chat/Sequence): GET /bbs/logging.php?action=login HTTP/1.1\r\n
HTTP/1.1 200 OK\r\n
CsN_sid=RkWOSy; expires=Thu, 13-Jan-2011 09:26:26 GMT; path=/; httponly
<input type="hidden" name="formhash" value="dc5dc9b8" />\r\n
Expert Info (Chat/Sequence): POST /bbs/logging.php HTTP/1.1\r\n
CsN_sid=RkWOSy
action=login&formhash=dc5dc9b8&loginfield=username&questionid=0&answer=&loginmode=normal&loginsubmit=true&username=test&password=test
HTTP/1.1 200 OK\r\n
CsN_auth=0d5eTSofQlbIT7ENDULLpdt%2FCi3ysya4vt3LHVIVY%2BRnUAsxR5Gx8R4TOmcS7yXSVjsJ1BUG%2BVb0THYVj5YagA; expires=Sun, 03-Jan-2021 09:26:37 GMT; path=/; httponly
<a href="logging.php?action=logout&formhash=dc5dc9b8">\315\313\263\366</a>\r\n
GET /bbs/post.php?action=newthread&fid=10&extra=page%3D1 HTTP/1.1\r\n
CsN_sid=RkWOSy; CsN_auth=0d5eTSofQlbIT7ENDULLpdt%2FCi3ysya4vt3LHVIVY%2BRnUAsxR5Gx8R4TOmcS7yXSVjsJ1BUG%2BVb0THYVj5YagA
HTTP/1.1 200 OK\r\n
<input type="hidden" name="formhash" id="formhash" value="570a67c4" />\r\n
<input type="hidden" name="posttime" id="posttime" value="1294306004" />\r\n
<input type="hidden" name="wysiwyg" id="e_mode" value="0" />\r\n
<input type="hidden" name="iconid" id="iconid" value="" />\r\n
POST /bbs/post.php HTTP/1.1\r\n
CsN_sid=RkWOSy; CsN_auth=0d5eTSofQlbIT7ENDULLpdt%2FCi3ysya4vt3LHVIVY%2BRnUAsxR5Gx8R4TOmcS7yXSVjsJ1BUG%2BVb0THYVj5YagA
action=reply&replysubmit=yes&replysubmit=true&formhash=570a67c4&fid=10&tid=15&subject=&message=6666666666666666666666666
HTTP/1.1 200 OK\r\n
CsN_oldtopics=D15D; expires=Thu, 06-Jan-2011 10:27:06 GMT; path=/
CsN_fid10=1294306025; expires=Thu, 06-Jan-2011 10:27:06 GMT; path=/
CsN_visitedfid=10; expires=Sat, 05-Feb-2011 09:27:06 GMT; path=/
- 大小: 15.1 KB
分享到:
相关推荐
在Mac OS操作系统中,用户有时会遇到电脑在尝试进入睡眠模式或者从睡眠中唤醒时出现错误,这可能是由于系统中的某些软件冲突、硬件问题或者是设置不当导致的。本解决方案提供了一个补丁,旨在修复这个问题,确保Mac...
自定义栏目, 发送消息 , 微信接口 /** * 监听微信服务器推送信息Action. * * @return void */ public function indexAction() { ... arComp('ext.weixin')->registerEvent('click' , array($this, 'click'));...
《PHPWind论坛系统与DVBBS的整合及BGK2.0版本详解》 PHPWind是一款广泛应用于互联网的开源论坛系统,以其高效、稳定、易用的特点,深受广大站长的喜爱。而DVBBS则是一款历史悠久的论坛软件,拥有庞大的用户群体。...
本文将详细介绍ARM低功耗技术的核心组件——ARM Power Management Kit (PMK),以及如何利用这些技术来优化芯片设计中的功耗管理。 #### 二、ARM Power Management Kit (PMK) **1. PMK简介** ARM Power Management...
HZBooks.,Tagging,People-Powerd.Metadata.For.the.Social.Web,.标签_标记系统设计实践
PowerdDesigner数据建模使用说明 详细介绍了使用PowerdDesigner 进行数据库建模的步骤,按本说明,实际操作一遍,基本会使用PowerdDesigner数据建模了
内容索引:脚本资源,jQuery,Google,API,搜索引擎 基于jQuery的Google Powerd,创建一个自定义的Google搜索引擎,你只要使用Google AJAX Search API,你就可以定制一个界面漂亮的google 结果集搜索引擎到你的网站上,...
Conext Battery Backup UPS电源守护程序。 cpowerd监视Conext UPS的电源状态。 它可以检测到电源故障并安全地关闭系统,或者在恢复电源后取消关闭。 电池电量不足警报尚未实现。
标题“PreventSleep-禁止休眠与关闭显示器”所指的是一个专为Windows操作系统设计的实用程序,其主要功能是阻止系统进入休眠模式并防止显示器自动关闭。这在进行一些需要长时间保持系统活跃的任务,如大型软件安装、...
并通过数据库原理软件设计实践,巩固在课堂教学中学习的关于数据库原理的 有关知识和数据库系统建立的方法,熟练掌握对于实际问题,为了建立一个关系数据库 信息管理系统,必须得经过需求分析、概念结构设计、逻辑...
Sybase PowerDesigner V15.2 破解文件。 使用说明:安装PowerDesigner v15.2.0.3042后,复制此文件到安装目录替换同名文件。PowerDesigner v15.2请到相关站点下载。
4. **屏幕亮度自动调节**:补丁可能优化了自动亮度调整算法,使其更加敏感,能在光线变化时更快地调整,从而减少不必要的电池消耗。 5. **CPU频率控制**:通过对CPU频率的智能调控,当设备温度升高或电池电量降低时...
NowShop系统运行环境: ☆语言环境:ASP ☆数据库类型:ACCESS ☆其它要求:FSO(必须)、Jmail(可选) ☆服务器操作系统:简体中文Windows 2000、2003服务器操作系统。...Powerd By:Now Shop商城系统 V4.5
《NowShop商城系统 V4.5》运行稳定、安全可靠、功能强大、傻瓜式后台管理,大量独具特色的功能在同类购物系统中独树一帜,它“易用、实用、超强人性化”的...Powerd By:Now Shop商城系统 V4.5 http://bbs.fytcw.com
最新版本PowerDesigner 16.6汉化工具,含安装包下载地址。完全傻瓜式汉化,你值得拥有。
4. 在底部添加版权信息,使用`coryRight`方法,居中显示“Powerd by Sunwq!”。 在`draw`方法内部,`setTreeBody`方法用于绘制树身,根据给定的长度遍历并设置随机字符和颜色。`start`和`end`方法分别设置开始和...
笔者小记: 昨日WIN7X64有一次710的重要更新,导致雷云出错,键盘多功能按键失效。 之后想着装回老版本的单独键盘驱动,但是之前雷云自动更新到2.03的... ---POWERD BY SAMKING.LEE WECHAT:691258 22:50 2018/7/13
【PowerDesigner数据建模实验报告】是针对信息系统需求分析与数据建模的实践学习,旨在理解和掌握数据模型的原理及工具应用。实验的核心是通过PowerDesigner这一CASE工具,完成从概念数据模型(CDM)到物理数据模型...
1. **`Header append Powerd-By wuchen`**: 在响应头中添加`Powerd-By: wuchen`字段。 #### 八、浏览器缓存有效期设置 1. **`ExpiresActive On`**: 开启浏览器缓存。 2. **`ExpiresDefault A86400`**: 设置默认...
通过对这个文件进行编辑,可以自定义IP4在不同使用状态下的电力消耗,如在低电量模式下自动降低屏幕亮度、减少后台应用程序的活动等,以延长电池寿命。 ### 三、操作步骤与注意事项 #### 操作步骤: 1. **备份...