<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
 </HEAD> <BODY>
 <?php
include "Snoopy.class.php";
$snoopy = new Snoopy;//获取表单需要的字段
/*
$snoopy->fetchform("http://www.phpx.com/happy/logging.php?action=login");
echo $snoopy->results."<br />"; 
*/$submit_url = "http://www.phpx.com/happy/logging.php?action=login"; 
$submit_vars["cookietime"] = "2592000";
$submit_vars["loginfield"] = "username";
$submit_vars["username"] = "你的用户名"; //你的用户名
$submit_vars["password"] = "你的密码";  //你的密码
$submit_vars["questionid"] = "0";
$submit_vars["answer"] = "";    
$submit_vars["loginsubmit"] = "登录";
//$submit_vars["loginsubmit"] = "dl"; //可以
//$submit_vars["loginsubmit"] = ""; //不行
//问题1:为什么要加入上面那句:$submit_vars["loginsubmit"] = "登录",而且“登录”改为任何字眼都可以,但“”不可以
$snoopy->submit($submit_url,$submit_vars);
echo $snoopy->results;
//问题2:登录成功后跳转到http://127.0.0.1/snoopy/index.php
?>
 </BODY>
</HTML>

解决方案 »

  1.   

    三个问题:1、为什么要加入上面那句:$submit_vars["loginsubmit"] = "登录",提交按钮应该不是表单的一部分
    2、为什么“登录”改为任何字眼都可以,但“”不可以,是snoopy的bug吗
    3、登录成功后跳转到http://127.0.0.1/snoopy/index.php,http://127.0.0.1/snoopy/是我的代码的目录,怎么跳转到预期的http://www.phpx.com/happy/index.php呢
      

  2.   

    1.这个字段是表单的一个隐藏字段,如:<input type="hidden" value="XX"/>.
    2.这是由表单提交后的处理脚本决定,照你说的情况,后面判断是用的!empty($_POST[loginsubmit]),不是Snoopy的问题.
    3.$snoopy->submit($submit_url,$submit_vars);
    $snoopy->fetch('http://www.phpx.com/happy/index.php');//直接抓取最终页面
    echo $snoopy->results;
      

  3.   

    采集表单数据$snoopy->fetchform("http://www.phpx.com/happy/logging.php?action=login");
    echo $snoopy->results; 结果是:<HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
     </HEAD> <BODY>
     <form method="post" name="login" id="loginform" class="gateform" onsubmit="pwdclear = 1;ajaxpost('loginform', 'returnmessage', 'returnmessage', 'onerror');return false;" action="logging.php?action=login&amp;loginsubmit=yes">
    <input type="hidden" name="formhash" value="e2f5ffea" />
    <select name="loginfield" style="float:left;width:50px;" id="loginfield"><option value="username">用户名
    </option><option value="uid">UID
    </option></select>
    <input type="text" name="username" autocomplete="off" size="36" class="txt" tabindex="1" value="" />
    <input type="password" id="password3" name="password" onfocus="clearpwd()" onkeypress="detectcapslock(event, this)" size="36" class="txt" tabindex="1" />
    <select id="questionid" name="questionid" change="if($('questionid').value >
    <option value="0">安全提问
    </option><option value="1">母亲的名字
    </option><option value="2">爷爷的名字
    </option><option value="3">父亲出生的城市
    </option><option value="4">您其中一位老师的名字
    </option><option value="5">您个人计算机的型号
    </option><option value="6">您最喜欢的餐馆名称
    </option><option value="7">驾驶执照的最后四位数字
    </option></select><input type="text" name="answer" id="answer" style="display:none" autocomplete="off" size="36" class="txt" tabindex="1" />
    <input type="checkbox" class="checkbox" name="cookietime" id="cookietime" tabindex="1" value="2592000"  />
    </form>
    <form method="post" id="lostpwform" onsubmit="ajaxpost('lostpwform', 'returnmessage3', 'returnmessage3', 'onerror');return false;" action="member.php?action=lostpasswd&amp;lostpwsubmit=yes&amp;infloat=yes">
    <input type="hidden" name="formhash" value="e2f5ffea" />
    <input type="hidden" name="handlekey" value="lostpwform" />
    <input type="text" name="username" size="25" value=""  tabindex="1" class="txt" />
    <input type="text" name="email" size="25" value=""  tabindex="1" class="txt" />
    </form> </BODY>
    </HTML>
      

  4.   

    登录的表单里没有loginsubmit这个字段
    但登录的页面有
    <button class="submit" type="submit" name="loginsubmit" value="true" tabindex="1">登录</button>
    提交的按钮也是表单数据的一部分吗?
      

  5.   

    是表单数据的一部分,但一般不使用button标签做提交按钮,所以Snoopy没对它进行抓取也是很正常的.
      

  6.   


    有点迷糊,submit也是表单的一部分的话,那你回复我的另外一个贴
    http://topic.csdn.net/u/20111025/10/b615174d-d3d7-407d-bc88-62d09b774f03.html
    <input type="submit" name="loginSubmit" value ="submit">
    我的模拟登录代码里没有对loginSubmit的值进行提交,为什么可以成功模拟登录呢