解决方案 »

  1.   

    返回 <script language='javascript'>alert('密码错误!!');</script>这个网站没有使用 cookie 传递 sessionid 而是通过 url 传递的
    所以你把这个写死是不行的:
    http://jwxt.nbut.cn/(gnqj51blynlz1k45ufftjgux)/default_ysdx.aspx
    而是应这样写$url = 'http://jwxt.nbut.cn';
    $u = get_headers($url, 1);
    $login_url = 'http://jwxt.nbut.cn' . dirname($u['Location']) . '/default_ysdx.aspx';
    另外提交的参数应是关联数组,而非下标数组$post_fields = array(
      'TextBox1' => $user = '11480010126',
      'TextBox2' => 'tianyun',
      'RadioButtonList1' => '学生',
      '__VIEWSTATE' => 'dDw1MjQ2ODMxNzY7Oz5PMj6WMeVIzgWyGp6TS4sLvnQtaA==',
      "Button1" => "  登录  ",
    );
    注意:要使用 gbk 编码的所以并不是重定向的问题,而是你根本就没有登录上去用于现在返回的是 密码错误,所以无法再观察第二段 curl 的情况了
      

  2.   

    2楼已经分析的很正确,我只作解释!
    当输入网址http://jwxt.nbut.cn,服务端会重定向到一个网页,也就是在http://jwxt.nbut.cn后加上/随机串/default_ysdx.aspx,这个随机串存储到服务端的。所以你写死就是不正确的。
    首先请求网址http://jwxt.nbut.cn。获取响应头中的Location,如图:
    然后拼接你的url,再次访问http://jwxt.nbut.cn/Location/default_ysdx.aspx网址。这是一点。
    2:查看源代码
    提交的参数是关联数组,并非下表数组。
    截部分图:
    上面完成了!你就登录成功了。