【php】curl模拟登录抓取页面信息

【php】curl模拟登录抓取页面信息

在本项目中,使用php抓取四川大学综合教务网站的成绩信息、课程信息以及登录用户的基本资料,解析数据并存入数据库,以实现对所得信息的进一步分析,并呈现给用户。
本文主要记录了使用curl模拟登录,获取cookie1并进行数据抓取的过程。

curl基本特性

  • 模拟浏览器传输数据
  • 实现post/get方式传输
  • 支持多种协议:HTTP、HTTPS、FTP上传
  • 支持cookie,用户名/密码的认证

使用curl完成请求的简单步骤

  1. 初始化一个curl句柄
    resource curl_init ([ string $url = NULL ] )
  2. 设置curl选项
    bool curl_setopt ( resource $ch , int $option , mixed $value )
  3. 执行curl请求
    mixed curl_exec ( resource $ch )
  4. 释放curl资源
    void curl_close ( resource $ch )

实现步骤详解

1. 初始化curl句柄
初始化新的会话,返回curl句柄,用于接下来的三个步骤:curl_setopt、curl_exec、curl_close。
代码:

//设置请求所需信息
$userzjh = "XXXXXX";
$usermm  = "XXXXXX";
$request = "mm=$usermm&zjh=$userzjh";
$cookie_jar = tempnam('./tmp','cookie'); //设置cookie文件的保存位置

$curl = curl_init(); //初始化,获得curl句柄

2.设置curl选项
使用curl_setopt函数设置curl的相应传输选项。
此函数中包含三个参数:resource $ch , int $option , mixed $value
第一个参数为步骤一中初始化所得的curl句柄,第二个参数所要设置的选项,第三个参数为选项的值。
curl部分选项与可选值对应表如下:

option选项说明value值
CURLOPT_URL设置想用PHP取回的URL地址,即想要获取信息的页面地址。(注意:非登录地址)URL地址
CURLOPT_POST设置使用POST方式发送数据true/false
CURLOPT_POSTFIELDS发送post传输所需数据(内容格式可通过抓包工具或浏览器开发者工具获得)内容
CURLOPT_COOKIEJAR将cookie信息保存到文件中保存文件地址
CURLOPT_RETURNTRANSFER将curl_exec()获取的信息以文件流的形式返回,而不是直接输出true/false
CURLOPT_HEADER启用时会将头文件的信息作为数据流输出,头文件信息中包含是否登录成功、重定向网址等信息true/false
CURLOPT_COOKIEFILE传递一个包含cookie数据的文件名的字符串文件名

代码:

curl_setopt($curl,CURLOPT_URL,'http://zhjw.scu.edu.cn/loginAction.do'); //要抓取的页面url
curl_setopt($curl, CURLOPT_POST, 1); //使用post传输数据
curl_setopt($curl, CURLOPT_POSTFIELDS, $request); //传递数据
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar); //把返回来的cookie信息保存在$cookie_jar文件中
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设定返回的数据是否自动显示
curl_setopt($curl, CURLOPT_HEADER, false); //设定是否显示头信息

3.执行curl请求
设置所需选项的值后,执行请求,并获得返回结果。

$result = curl_exec($curl); 
//若设置CURLOPT_HEADER为true,此处$result中保存头信息
if (curl_errno($curl)) //判断是否执行成功
{
    echo 'Errno'.curl_error($curl);
}

4.释放curl资源

curl_close($curl); //关闭会话

完整代码

//设置请求所需信息
$userzjh = "XXXXXX";
$usermm  = "XXXXXX";
$request = "mm=$usermm&zjh=$userzjh";
$cookie_jar = tempnam('./tmp','cookie'); //设置cookie文件的保存位置

$curl = curl_init(); //初始化,获得curl句柄

curl_setopt($curl,CURLOPT_URL,'http://zhjw.scu.edu.cn/loginAction.do'); //要抓取的页面url
curl_setopt($curl, CURLOPT_POST, 1); //使用post传输数据
curl_setopt($curl, CURLOPT_POSTFIELDS, $request); //传递数据
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar); //把返回来的cookie信息保存在$cookie_jar文件中
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设定返回的数据是否自动显示
curl_setopt($curl, CURLOPT_HEADER, false); //设定是否显示头信息
$result = curl_exec($curl); 
//若设置CURLOPT_HEADER为true,此处$result中保存头信息
if (curl_errno($curl)) //判断是否执行成功
{
    echo 'Errno'.curl_error($curl);
}
curl_close($curl); //关闭会话

//获取学籍信息
$curl4 = curl_init(); //重新建立一个会话
$url = 'http://zhjw.scu.edu.cn/xjInfoAction.do?oper=xjxx'; 
curl_setopt($curl4,CURLOPT_URL,$url);
curl_setopt($curl4,CURLOPT_COOKIEFILE,$cookie_jar);
curl_setopt($curl4,CURLOPT_RETURNTRANSFER,1);
$content = curl_exec($curl4);
curl_close($curl4);
file_put_contents("./xueji.txt",$content); //将html页面内容保存在文件中,用于后续分析

  1. 登录后,可获得从服务器发送来的session ID,这个session ID 包含在之后每次请求的cookie(客户端)中,用于读取服务器端的对应session,辨别用户身份。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值