royliaoz跟于以下方法还是无法解决
这个问题出现在:当你用模拟登陆的方法登陆了discuz论坛后,进行回复或与此类似的操作时,会出现这项提示:您的请求来路不正确,无法提交。出现这项提示的原因是多种多样的,但是对于一个模拟登陆的程序而言,主要的可能是这样一种情况:在post时,未设置formhash。
这个formhash的值可以在论坛的任意页面获得,只要用正则表达式简单匹配一下即可,以python为例:
formhash = re.findall(‘formhash=([1-9a-e]*)’,page)
formhash的值是一个长度为8的字符串,以16进制表示。如: 58a4c7db。以我的经验来看,在一次的登陆过程中,formhash值是不会变的,不过为保险起见,你可以在每次进行新的相关操作时,均获取一遍该hash值。
既然你会通过搜索引擎来到这里,想必也是走了不少弯路,如果我这里的文章仍然不能解决你的问题,我想你应该通过这样的方法继续探索真相:我们知道,出现”您的请求来路不正确,无法提交”是因为在dz\templates\default\messages.lang.php文件中定义了:’submit_invalid’ => ‘您的请求来路不正确,无法提交。’,而引用submit_invalid的代码位于:dz\include\global.func.php的函数submitcheck()中。导致出现这一提示的判断来自于这句话:
if($allowget || ($_SERVER['REQUEST_METHOD'] == ‘POST’ && $GLOBALS['formhash'] == formhash() && empty($_SERVER['HTTP_X_FLASH_VERSION']) && (empty($_SERVER['HTTP_REFERER']) || preg_replace(“/https?:\/\/([^\:\/]+).*/i”, ““, $_SERVER['HTTP_REFERER']) == preg_replace(“/([^\:]+).*/”, ““, $_SERVER['HTTP_HOST']))))
正是这里的判断让你得到了那样的提示。从这个判断我们可以知道,你最好使用post方法,提交的formhash正确,且http_referer字段的值最好和主机名能够保持一致,这个应该不难吧?
当然了,我还是得说:有这样需求的人都是很邪恶的,我也是。
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18