php curl登录,php curl实现第三方帐号登录

今天帮学院写了个小网站,根据要求要用数字沈航帐号登录,还没办法与数字沈航的工作人员交流,无奈想出了个使用curl这个解决方案。

数字沈航(http://i.sau.edu.cn)是我们学校全部数字服务的入口,之前有朋友要写爬虫也问过我如何登录数字沈航,我当时也没多想,简单说了下最通用的方案(直接POST表单),并没有尝试,今天做的时候发现原来有个csrf_token验证。

在这里记录一下解决的方案:

1、首先就是先审查元素看一下表单的代码,查看有哪些元素。

6609f9a2ae82f73487af2951d5a3ec9d.png

2、发现元素不少,于是提交一次看Request内容。

4db007edcb0209f2448258b28caca11c.png

3、这里看到了有个lt字段,是一段随机码(猜测是csrf_token),并且密码也是md5加密过的了。(这里是演示,所以输入的是假密码,所以不用再试了...)

4、于是我们只要很简单的构造表单,至于lt字段,我的做法是,先抓一遍页面,然后正则匹配到这段字符串,然后用就用这个提交,果然奏效了。

5、最后根据返回的字符,就能判断是否登录成功了。(爬虫当然也可以这么做)

以下是php代码:function i_sau_validate($username, $password) {

$login_url = 'http://cas.sau.edu.cn:8080/cas/login';

$ch = curl_init($login_url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_TIMEOUT_MS, 10000);

$content = curl_exec($ch);

$csrf_token_matches = [];

$csrf_token = '';

preg_match('//i' ,$content, $csrf_token_matches);

if($csrf_token_matches)

$csrf_token = $csrf_token_matches[1];

$login_url = 'http://cas.sau.edu.cn:8080/cas/login';

$password = md5($password);

$post_fields = "serviceName=0&loginErrCnt=0&username=$username&password=$password&lt=$csrf_token";

$ch = curl_init($login_url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);

curl_setopt($ch, CURLOPT_TIMEOUT_MS, 10000);

$content = curl_exec($ch);

curl_close($ch);

if(!$content) {

return "timeout";

} else if(preg_match('/mistake_notice/i', $content)){

return 'denied';

} else if(preg_match('/window\.location="cas\.sau\.edu\.cn:8080\/cas"/i', $content)) {

return "ok";

} else {

return "unknow";

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值