【php】curl模拟登录抓取页面信息
在本项目中,使用php抓取四川大学综合教务网站的成绩信息、课程信息以及登录用户的基本资料,解析数据并存入数据库,以实现对所得信息的进一步分析,并呈现给用户。
本文主要记录了使用curl模拟登录,获取cookie1并进行数据抓取的过程。
curl基本特性
模拟浏览器传输数据实现post/get方式传输支持多种协议:HTTP、HTTPS、FTP上传支持cookie,用户名/密码的认证
使用curl完成请求的简单步骤
初始化一个curl句柄resource curl_init ([ string $url = NULL ] )
设置curl选项
bool curl_setopt ( resource $ch , int $option , mixed $value )
执行curl请求
mixed curl_exec ( resource $ch )
释放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部分选项与可选值对应表如下:
代码:
curl_setopt($curl,CURLOPT_URL,'http://zhjw./loginAction.do'); //要抓取的页面urlcurl_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); //关闭会话
1
完整代码
//设置请求所需信息$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./loginAction.do'); //要抓取的页面urlcurl_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./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页面内容保存在文件中,用于后续分析
登录后,可获得从服务器发送来的session ID,这个session ID 包含在之后每次请求的cookie(客户端)中,用于读取服务器端的对应session,辨别用户身份。 ↩
--------------------- 本文来自 cocole2 的CSDN 博客 ,全文地址请点击:/cocole2/article/details/72581110?utm_source=copy