PHP China | 中国开源之路 's Archiver

pigpluspower 发表于 2007-10-5 17:45

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]]

fakir 发表于 2007-10-5 21:19

思路是没错,一直到curl部分都没错误.
感觉curl_setopt($ch,CURLOPT_POSTFIELDS,$loginurlp);好像错了,第三个参数应该是字符串的,你是数组.换成你第二个注释里的写法你试过没?我没有libcurl,试不了.反正我用html代替那段代码就成功了,问题应该就在curl那儿,你再看看吧.

pigpluspower 发表于 2007-10-6 10:18

[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贴出来吗?
急用,谢谢!

fakir 发表于 2007-10-6 11:14

[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]]

pigpluspower 发表于 2007-10-6 11:42

倒~
我需要获取登录后的页面啊~~~
要不然用curl干什么……

fakir 发表于 2007-10-6 11:54

对啊,这不就是获取登陆后的页面嘛,直接就到这里了,抓个图看看是不是

pigpluspower 发表于 2007-10-6 12:36

晕~~~
我还要对获取的结果(页面)进行处理啊~~~

不过我想我应该是curl的post方法搞错了吧,
但我不太会用post方法。

不知直接在浏览器输入变量行不行,反正我试了n遍还是不行,麻烦你顺便帮我试一试吧……

pigpluspower 发表于 2007-10-6 14:16

解决了!

呼~~
我真是个笨蛋啊~~

就是postfields的格式写错了~~~

[php]
</php
//......
$loginurlp = array("$username=mtraviantest","$password=test123456");
...

......
curl_setopt($ch,CURLOPT_POSTFIELDS,$loginurlp);
......

?>[/php]

这很明显的错了!postfields功的格式不应该是“xxx=yyy”,而是"xxx"=>"yyy"。
笨啊~~~
看来官网有必要规范一下curl的所有格式......

fakir 发表于 2007-10-6 15:58

晕,这个错误我还真没注意到,低级......lz和我一起面壁去吧.

ewing 发表于 2007-10-11 12:49

大哥你成功了,我按照你的去做怎么不行?

我也在研究一个登录问题,想按照你的方法试试,但是确得不到你说有结果,请指点一下。谢谢。
[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]

ewing 发表于 2007-10-11 14:10

我用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]

wenlingnet 发表于 2007-10-16 14:52

其实CURLOPT_POSTFIELDS的制直接用你屏蔽掉的不久Ok了吗?
//$loginurlp = "$username=mtraviantest&$password=test123456&login=$loginid&autologin=ja&$hidnam=$hidval&w=1024:768";
干嘛非要弄个数组呢?还弄个赋值标识错误!

youreyes 发表于 2008-7-4 19:58

[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]

avochen 发表于 2008-7-16 16:26

我想学习学习。。。

kukat 发表于 2008-7-17 09:59

snoopy是个不错的东西

lenco 发表于 2008-7-18 09:54

[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]

shanji 发表于 2008-7-18 13:08

感兴趣,留名

asu530 发表于 2008-10-8 02:52

不错,有意思。学习了。

adriandcb 发表于 2008-10-24 14:29

呵呵,鼓励一下tukiz30

ieliwb 发表于 2008-11-19 16:37

:funk: :funk: :biggrin: 玩什么啊:funk:

页: [1] 2

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.