cookie + session + curl = 还拿它没办法?
麻烦大家一起对付这个顽固的登录页吧~我可谓是用尽各种方法亦不能把这个登录页怎么地了……
[url=http://s5.travian.cn/login.php]http://s5.travian.cn/login.php[/url]
这网页游戏,相信大家没玩过也见过……
本来想做一个外挂的(良性辅助工具,做完后发给大家用!)……但“登录”这个问题就先把我给难倒了。说其“顽固”一点也不错,大家请看:
[php]<tr><td><label>用户名:</label>
<input class="fm fm110" type="text" name="ef3ea85" value="" maxlength="15"> <span class="e f7"></span>
</td></tr>
<tr><td><label>密码:</label>
<input class="fm fm110" type="password" name="e2d3a4e" value="" maxlength="20"> <span class="e f7"></span>
</td></tr>[/php]
这是它的“核心”,看它个变量名竟然还玩起加密来了!
没事,我照搬:直接在浏览器上打。
结果:
[php]<tr><td><label>用户名:</label>
<input class="fm fm110" type="text" name="ef3ea85" value="23sdf84asdg" maxlength="15"> <span class="e f7">用户名不存在</span>
</td></tr>[/php]
岂有此理!跟我耍花枪?!一看,不对!还有几段:
段1(52行):
[php]<form method="post" name="snd" action="dorf1.php">
<input type="hidden" name="w" value="">
<input type="hidden" name="login" value="1191576363">[/php]
段2(68行):
[php]<p align="center"><input type="hidden" name="ed4da8e" value="7ec2dd791e">
[/php]
好啊!玩“加密”?
先来解释一下:
第一个hidden的w值是要浏览器大小,直接是“1024:768”就可以了
第二个:“login”估计是登录代码(序号?)之类的,不明用处……
第三个:TNND,你说这是什么?
好了,对症下药,我用post方法写了一个php:
[php]<?php
//login
$html=file_get_contents("http://s5.travian.cn/login.php");
//username
preg_match("/<input class=\"fm fm110\" type=\"text\" name=\"(.*)\" value=/",$html,$username);
$username = $username[1];
print_r($username."\n");
//password
preg_match("/<input class=\"fm fm110\" type=\"password\" name=\"(.*)\" value=/",$html,$password);
$password = $password[1];
echo $password."\n";
//login id
preg_match("/<input type=\"hidden\" name=\"login\" value=\"(.*)\">/",$html,$loginid);
$loginid = $loginid[1];
echo $loginid."\n";
//按钮值
$autologin = 'autologin=ja';
//hidden value
preg_match("/<p align=\"center\"><input type=\"hidden\" name=\"(.*)\" value=\"(.*)\">/",$html,$hidval);
$hidnam = $hidval[1];
$hidval = $hidval[2];
echo $hidnam."\n".$hidval."\n";
//windows
$w = 'w=1024:768';
echo "\n";
//echo $loginurl = "http://s5.travian.cn/login.php?$username=mtraviantest&$password=test123456&login=$loginid&autologin=ja&$hidnam=$hidval&w=1024:768";
echo $loginurl = "http://s5.travian.cn/login.php";
//$loginurlp = "$username=mtraviantest&$password=test123456&login=$loginid&autologin=ja&$hidnam=$hidval&w=1024:768";
$loginurlp = array("$username=mtraviantest","$password=test123456","login=$loginid","autologin=ja","$hidnam=$hidval","w=1024:768");
echo "\n\n";
$ch = curl_init($loginurl);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$loginurlp);
$ret = curl_exec($ch); //获取登录后的页面
curl_close($ch);
echo $ret;
?>[/php]
气死了!!结果还是一样——找不到用户!
大家帮帮我吧![color=Red]只要能获取登录后的页面就行![/color]
我保证!完事后我一定把这个程序贴出来给大家用!
Tip:为了方便大家,我注册了一个帐号供测试:
用户名:mtraviantest
密码:test123456
[[i] 本帖最后由 pigpluspower 于 2007-10-6 11:40 编辑 [/i]] 思路是没错,一直到curl部分都没错误.
感觉curl_setopt($ch,CURLOPT_POSTFIELDS,$loginurlp);好像错了,第三个参数应该是字符串的,你是数组.换成你第二个注释里的写法你试过没?我没有libcurl,试不了.反正我用html代替那段代码就成功了,问题应该就在curl那儿,你再看看吧. [quote]原帖由 [i]fakir[/i] 于 2007-10-5 21:19 发表 [url=http://www.phpchina.com/bbs/redirect.php?goto=findpost&pid=281371&ptid=38020][img]http://www.phpchina.com/bbs/images/common/back.gif[/img][/url]
思路是没错,一直到curl部分都没错误.
感觉curl_setopt($ch,CURLOPT_POSTFIELDS,$loginurlp);好像错了,第三个参数应该是字符串的,你是数组.换成你第二个注释里的写法你试过没?我没有libcurl,试不了.反正我用htm ... [/quote]
成功了?
老兄,可以麻烦你把html或url贴出来吗?
急用,谢谢! [php]
<?php
//login
$html=file_get_contents("http://s5.travian.cn/login.php");
//username
preg_match("/<input class=\"fm fm110\" type=\"text\" name=\"(.*)\" value=/",$html,$username);
$username = $username[1];
//password
preg_match("/<input class=\"fm fm110\" type=\"password\" name=\"(.*)\" value=/",$html,$password);
$password = $password[1];
//login id
preg_match("/<input type=\"hidden\" name=\"login\" value=\"(.*)\">/",$html,$loginid);
$loginid = $loginid[1];
//按钮值
$autologin = 'autologin=ja';
//hidden value
preg_match("/<p align=\"center\"><input type=\"hidden\" name=\"(.*)\" value=\"(.*)\">/",$html,$hidval);
$hidnam = $hidval[1];
$hidval = $hidval[2];
//windows
$w = 'w=1024:768';
?>
<div style="display:none">
<FORM name = form1 METHOD=POST ACTION="http://s5.travian.cn/dorf1.php">
<input class="fm fm110" type="text" name="<?echo $username;?>" value="mtraviantest" maxlength="15"> <span class="e f7"></span>
<input class="fm fm110" type="password" name="<?echo $password;?>" value="test123456" maxlength="20"> <span class="e f7"></span>
<input type="hidden" name="w" value="1024:768">
<input type="hidden" name="login" value="<?echo $loginid;?>">
<input type="hidden" name="<?echo $hidnam;?>" value="<?echo $hidval;?>">
<INPUT TYPE="submit" >
</FORM>
</div>
<script>
document.form1.submit()
</script>
[/php]
这回是完美的
[[i] 本帖最后由 fakir 于 2007-10-6 11:23 编辑 [/i]] 倒~
我需要获取登录后的页面啊~~~
要不然用curl干什么…… 对啊,这不就是获取登陆后的页面嘛,直接就到这里了,抓个图看看是不是 晕~~~
我还要对获取的结果(页面)进行处理啊~~~
不过我想我应该是curl的post方法搞错了吧,
但我不太会用post方法。
不知直接在浏览器输入变量行不行,反正我试了n遍还是不行,麻烦你顺便帮我试一试吧……
解决了!
呼~~我真是个笨蛋啊~~
就是postfields的格式写错了~~~
[php]
</php
//......
$loginurlp = array("$username=mtraviantest","$password=test123456");
...
......
curl_setopt($ch,CURLOPT_POSTFIELDS,$loginurlp);
......
?>[/php]
这很明显的错了!postfields功的格式不应该是“xxx=yyy”,而是"xxx"=>"yyy"。
笨啊~~~
看来官网有必要规范一下curl的所有格式...... 晕,这个错误我还真没注意到,低级......lz和我一起面壁去吧.
大哥你成功了,我按照你的去做怎么不行?
我也在研究一个登录问题,想按照你的方法试试,但是确得不到你说有结果,请指点一下。谢谢。[php]
<?
//echo phpinfo();
//login
$html=file_get_contents("http://s5.travian.cn/login.php");
//username
preg_match("/<input class=\"fm fm110\" type=\"text\" name=\"(.*)\" value=/",$html,$username);
$username = $username[1];
print_r($username."\n");
//password
preg_match("/<input class=\"fm fm110\" type=\"password\" name=\"(.*)\" value=/",$html,$password);
$password = $password[1];
echo $password."\n";
//login id
preg_match("/<input type=\"hidden\" name=\"login\" value=\"(.*)\">/",$html,$loginid);
$loginid = $loginid[1];
echo $loginid."\n";
//按钮值
$autologin = 'autologin=ja';
//hidden value
preg_match("/<p align=\"center\"><input type=\"hidden\" name=\"(.*)\" value=\"(.*)\">/",$html,$hidval);
$hidnam = $hidval[1];
$hidval = $hidval[2];
echo $hidnam."\n".$hidval."\n";
//windows
$w = 'w=1024:768';
echo "\n";
//echo $loginurl = "http://s5.travian.cn/login.php?$username=mtraviantest&$password=test123456&login=$loginid&autologin=ja&$hidnam=$hidval&w=1024:768";
echo $loginurl = "http://s5.travian.cn/login.php";
//$loginurlp = "$username=mtraviantest&$password=test123456&login=$loginid&autologin=ja&$hidnam=$hidval&w=1024:768";
$loginurlp = array("$username=>mtraviantest","$password=>test123456","login=>$loginid","autologin=>ja","$hidnam=>$hidval","w=>1024:768");
echo "\n\n";
$ch = curl_init($loginurl);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$loginurlp);
$ret = curl_exec($ch); //获取登录后的页面
curl_close($ch);
echo $ret;
?>
[/php]
我用snoopy一下就进去了,你试试看
[attach]14078[/attach][php]
<?
include "Snoopy.class.php";
header("Content-Type: text/html; charset=utf-8");
$snoopy = new Snoopy;
//$snoopy->fetchform("[url=http://s5.travian.cn/login.php]http://s5.travian.cn/login.php[/url]");
//print $snoopy->results;
/*
<form method="post" name="snd" action="dorf1.php">
<input type="hidden" name="w" value="">
<input type="hidden" name="login" value="1192081971">
<input class="fm fm110" type="text" name="eccc568" value="" maxlength="15">
<input class="fm fm110" type="password" name="e69c9bd" value="" maxlength="20">
<input type="hidden" name="e2819ea" value="">
<input type="image" value="login" border="0" name="s1" src="img/cn/b/l1.gif" width="80" height="20" >
</input>
<input type="Checkbox" name="autologin" value="ja" checked>
</form>
*/
$submit_url = "[url=http://s5.travian.cn/dorf1.php]http://s5.travian.cn/dorf1.php[/url]";
$submit_vars["w"] = "";
$submit_vars["login"] = time();
$submit_vars["eccc568"] = "mtraviantest";
$submit_vars["e69c9bd"] = "test123456";
$submit_vars["e2819ea"] = "";
$snoopy->submit($submit_url,$submit_vars);
print $snoopy->results;
?>
[/php] 其实CURLOPT_POSTFIELDS的制直接用你屏蔽掉的不久Ok了吗?
//$loginurlp = "$username=mtraviantest&$password=test123456&login=$loginid&autologin=ja&$hidnam=$hidval&w=1024:768";
干嘛非要弄个数组呢?还弄个赋值标识错误! [quote]原帖由 [i]pigpluspower[/i] 于 2007-10-6 14:16 发表 [url=http://bbs.phpchina.com/redirect.php?goto=findpost&pid=281567&ptid=38020][img]http://bbs.phpchina.com/images/common/back.gif[/img][/url]
呼~~
我真是个笨蛋啊~~
就是postfields的格式写错了~~~
[color=red]这很明显的错了!postfields功的格式不应该是“xxx=yyy”,而是"xxx"=>"yyy"。
笨啊~~~
看来官网有必要规范一下curl的所有格式......[/color] [/quote]
什么时候数组这样写了:[color=#ff0000]xxx=yyy????[/color]
[color=#ff0000]明明自己笨却怪什么官网,难道你这样写PHP没有报错吗?[/color]
[color=#ff0000]看得我真是莫名其妙[/color] 我想学习学习。。。 snoopy是个不错的东西 [quote]原帖由 [i]ewing[/i] 于 2007-10-11 12:49 发表 [url=http://bbs.phpchina.com/redirect.php?goto=findpost&pid=284677&ptid=38020][img]http://bbs.phpchina.com/images/common/back.gif[/img][/url]
我也在研究一个登录问题,想按照你的方法试试,但是确得不到你说有结果,请指点一下。谢谢。
[/quote]
没见过有这么写数组的 [color=#000][color=#00bb]$loginurlp [/color][color=#0770]= array([/color][color=#dd00]"$username=>mtraviantest"[/color][color=#0770],[/color][color=#dd00]"$password=>test123456"[/color][color=#0770],[/color][color=#dd00]"login=>$loginid"[/color][color=#0770],[/color][color=#dd00]"autologin=>ja"[/color][color=#0770],[/color][color=#dd00]"$hidnam=>$hidval")
而且你看看他的变量,好像都有问题 , 看仔细点 改改吧 :)[/color]
[/color] 感兴趣,留名 不错,有意思。学习了。 呵呵,鼓励一下tukiz30 :funk: :funk: :biggrin: 玩什么啊:funk:
页:
[1]
2
