客户需求
提供了一个discuz论坛,会员账号,要求获取文章页下载链接,下载链接是回复可见的。
思路
需要登录才能看到,这个火车头的cookie功能就可以解决了;
回复可见
办法1:是做个回复模块,规则里获取一些帖子的fid tid 等重要信息,利用模块回复,这样缺少了即时性。
办法2:用外部接口,调用帖子地址,通过帖子地址获取登录页,回帖页等信息,完成整个回复过程,并把回复后的。
这里选择了办法2
1.用抓包获取post请求的参数。
2.用python模拟回复。
遇到的问题
post请求后提示“您当前的访问请求当中含有非法字符“经查询一些相关资料发现discuz有个formhash验证。
- formhash是服务器返回给浏览器的一个字段,用于验证用户提交数据的合法性。
- 登陆用户的formhash在115天内是固定的;而未登录用户每次注册formhash都会改变。
- 提交表单时,将formhash值一起提交;discuz由submitcheck()函数校验formhash值是否正确;如果不正确,则认为是非法提交数据。submitcheck()在uchome的include/function_common.php文件中。
解决
拿了一篇文章测试在文章的源码果然看到了formhash,用正则获取formhash值,再用requests库的session共享cookie成功发布