概述
【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部分选项与可选值对应表如下:
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); //关闭会话
- 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.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页面内容保存在文件中,用于后续分析
- 登录后,可获得从服务器发送来的session ID,这个session ID 包含在之后每次请求的cookie(客户端)中,用于读取服务器端的对应session,辨别用户身份。 ↩
--------------------- 本文来自 cocole2 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/cocole2/article/details/72581110?utm_source=copy
最后
以上就是刻苦路人为你收集整理的【php】curl模拟登录抓取页面信息【php】curl模拟登录抓取页面信息的全部内容,希望文章能够帮你解决【php】curl模拟登录抓取页面信息【php】curl模拟登录抓取页面信息所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复