我是靠谱客的博主 刻苦路人,最近开发中收集的这篇文章主要介绍【php】curl模拟登录抓取页面信息【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); //关闭会话
  • 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页面内容保存在文件中,用于后续分析

  1. 登录后,可获得从服务器发送来的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模拟登录抓取页面信息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部