discuz模拟登录实现自动顶帖php程序

其实模拟登录就那点事,无法就是获得相应的参数,然后模拟发送,把获得的COOKIE 带入下一步操作中去
discuzx 系列为防止灌水,一直在用 formhash() 这个函数:

1、下面来看下formhash 这个函数:

 代码如下 复制代码

function formhash($specialadd = '') {
    global $_G;
    $hashadd = defined('IN_ADMINCP') ? 'Only For Discuz! Admin Control Panel' : '';
    return          substr(md5(substr($_G['timestamp'],0,-7).$_G['username'].$_G['uid'].$_G['authkey'].$hashadd.$specialadd), 8, 8);
}

注:生成方式:
1、截取的时间戳
2、用户名
3、用户ID
4、authkey
5、hashadd(定值)
6、specialadd(定值)
因为存在用户名和用户id ,所以 在登录前跟登录后的 产生的值是不同的,即:在登录前跟登录后你要2次来获得fromhash;
那么authkey又是个什么东西呢 ?

2、关于authkey

//代码位置:/source/class/discuz/discuz_application.php

 代码如下 复制代码
 if(empty($this->var['cookie']['saltkey'])) {
 $this->var['cookie']['saltkey'] = random(8);//这一步不要去管
 dsetcookie('saltkey', $this->var['cookie']['saltkey'], 86400 * 30, 1, 1);
}
$this->var['authkey'] = md5($this->var['config']['security']['authkey'].$this->var['cookie']['saltkey']);

在这里可以看到:authkey是根据配置文件的authkey 和cookie 里面的saltkey 来生成的
其实在这里就可以看出来了, 只要网站的$this->var['cookie']['saltkey'] 这个值始终保存在cookie里面就这样就可以保证 formhash 那里生成的值永远是一样的(永远是相对的)
这里还要说一点:

3 cookie系列

discuz 的cookie的前缀是随机生成的
代码位置:/source/class/discuz/discuz_application.php
 

 代码如下 复制代码
$this->var['config']['cookie']['cookiepre'] = $this->var['config']['cookie']['cookiepre'].substr(md5($this->;var['config']['cookie']['cookiepath'].'|'.$this->;var['config']['cookie']['cookiedomain']), 0, 4).'_';

只要你登录下网站看看cookie 的设置这里就可以了,他的前缀确实hi一直不变的,当然改了配置文件那肯定会变
到底该怎么写呢:说下我实现的思路
1、登录下访问网站一下抓取网页返回的 saltkey(cookie),formhash(值) 这两个值(saltkey在下面一定要带上,而且上下文要一致)
2、构造登录的内容然后模拟post 提交 (一定要带上第一步抓取到的cookie跟formhash 这一个值)
3、如果登录成功,接着获取一个页面的 formhash 跟设置的cookie(这次获得到的formhash 就是你可以一直使用的了)
4、构造发帖还有顶帖的post 提交到页面 (cookie 跟formhash 还是重点 )
关于php 使用 crul 模拟 post 部分代码

 代码如下 复制代码

$ch = curl_init($url); //初始化
    curl_setopt($ch, CURLOPT_HEADER, 1); //不返回header部分
    curl_setopt($ch, CURLOPT_POST, 1);//是否
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //返回字符串,而非直接输出
    curl_setopt($ch,CURLOPT_REFERER,$refer);
    curl_setopt($ch, CURLOPT_COOKIE,  $tocookies); //存储cookies
    curl_setopt($ch, CURLOPT_POSTFIELDS, $datas);

代码就不共享了,有能力的朋友自己写把; 这东西容易引起混乱

时间: 2024-10-03 23:11:05

discuz模拟登录实现自动顶帖php程序的相关文章

setopt-用php的curl模拟登录后自动跳转问题

问题描述 用php的curl模拟登录后自动跳转问题 我在使用curl模拟登陆时,模拟登录成功了,但是成功之后总是会自动跳转到另一个页面,请问我怎样才能使它不自动跳转呢? $url = "http://class.sise.com.cn:7001/sise/login_check.jsp"; // 设置cookie保存路径 $cookie = dirname(__FILE__) . '/cookie_student.txt'; $curl = curl_init();//初始化curl模

VC使用libcurl模拟登录CSDN并自动评论资源以获取积分

环境:Win7 64位+VC2008 软件及源码下载:(http://pan.baidu.com/s/1jGE52pK) 涉及到的知识点: C++多线程编程 libcurl的使用(包括发送http请求.发送cookie给服务器.保存cookie) 关于libcurl的资料,推荐大家参考下官方文档:http://curl.haxx.se/libcurl/c/example.html 软件运行结果 libcurl中的所有函数 curl_easy_cleanup  curl_easy_duphandl

看到Discuz论坛的置顶帖,我有话要说

中介交易 SEO诊断 淘宝客 云主机 技术大厅 今天看到DZ官方发了一个置顶帖,作为官方的置顶帖里,诋毁竞争对手,通过压低对手的声誉来抬高自己,实在太过了,大家可以看看他的回复帖别人的一些看法,我也很看不下去,这么久不来PW混了,也觉得有必要回骂一下DZ http://www. discuz.net/forum-86-1.html 很多东西,不要被外表所迷惑,大家都知道我本人是在PHPWind工作过大半年的时间,后来因为个人问题离开了美丽的杭州--因为老婆家是沈阳的,希望我们可以离沈阳近一点,所

C# .NET 模拟登录带有验证码的网站,并自动提交表单数据!

问题描述 1.模拟登录的网址:http://www.pceggs.com/nologin.aspx2.登陆后的页面网址:http://www.pceggs.com/play/pc28.aspx3.登陆后模拟表单提交的页面网址:http://www.pceggs.com/play/pg28Insert.aspx?LID=679556(注:此页面需要登录后才可以查看,并LID的值是最新一期需要投注的ID数字)[说明:1和2只是模拟登录网站,3是登录后模拟表单提交数据!]希望高手帮忙解决,基本随时在线

新浪微博模拟登录(Java)

     使用HttpClient模拟新浪微博登录,贴在这里做个备忘,也希望能帮助到有这方面需求的童鞋们,代码如下:        Java代码   package com.yida.spider4j.crawler.test.sina;      import java.io.UnsupportedEncodingException;   import java.math.BigInteger;   import java.net.URLEncoder;   import java.secur

网页-java单点登录SSO,模拟登录

问题描述 java单点登录SSO,模拟登录 要做一个Java单点登录系统,用户登录系统后,可以直接跳转到所需的子系统主页,无需再输入用户名密码.网上查了些资料,准备用cas实现,但发现子系统有权限管理,举个例子,用户所属部门不同,能访问的某个子系统的主页也不一样,cas貌似无法解决,想问下cas是不是真的没办法解决这个问题? 后来准备自己手动实现,有一个子系统是get方式传递用户名密码,自不必说,很容易实现.但有好几个是post方式传参,我开始使用HttpURLConnection模拟登录,但未

PHP Curl模拟登录微信公众平台、新浪微博实例代码_php实例

使用curl之前先打开curl配置,具体方式百度一下就知道,开启curl扩展.密码用md5加密,这是经过测试成功的,把用户跟密码改成你的就行了. 下面一段代码给大家介绍php使用curl模拟登录微信公众平台,具体代码如下所示: <?php //模拟微信登入 $cookie_file = tempnam('./temp','cookie'); $login_url = 'https://mp.weixin.qq.com/cgi-bin/login'; $pwd = md5("********

Discuz!论坛“阅读区域宽度”及“帖内图片最大宽度”的功能设置

http://www.aliyun.com/zixun/aggregation/29799.html">Discuz!是康盛创想(Comsenz)公司发布的一款论坛BBS建站产品.目前最新版本是Discuz! 7.2.本期教程笔者为大家讲解Discuz!论坛"阅读区域宽度"及"帖内图片最大宽度"的功能设置. "阅读区域宽度"指的是帖子内容中的文字内容的宽度,如Fig.1中所示"C. 阅读区域宽度". 注意: 1

模拟登录正方教务系统重定向页面拿到的状态码为什么 总是200不是302

问题描述 模拟登录正方教务系统重定向页面拿到的状态码为什么 总是200不是302 请求代码 List pairs = new ArrayList(); pairs.add(new BasicNameValuePair("__VIEWSTATE", "dDwyODE2NTM0OTg7Oz5hS%2FqlazCCYK7Agp6rx5GFtdHxlg%3D%3D")); pairs.add(new BasicNameValuePair("txtUserName&