首页 > 编程语言 >PHP模拟登录并获取数据

PHP模拟登录并获取数据

时间:2023-05-21 13:31:51浏览次数:38  
标签:setopt 登录 获取数据 cookie curl PHP post CURLOPT


cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信息。本文以模拟登录开源中国(oschina)为例,和大家分享cURL的使用。



PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下curl扩展。

代码实战

先来看登录部分的代码:

//模拟登录 
function login_post($url, $cookie, $post) { 
    $curl = curl_init();//初始化curl模块 
    curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址 
    curl_setopt($curl, CURLOPT_HEADER, 0);//是否显示头信息 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0);//是否自动显示返回的信息 
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中 
    curl_setopt($curl, CURLOPT_POST, 1);//post方式提交 
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));//要提交的信息 
    curl_exec($curl);//执行cURL 
    curl_close($curl);//关闭cURL资源,并且释放系统资源 
}

函数login_post()首先初始化curl_init(),然后使用curl_setopt()设置相关选项信息,包括要提交的url地址,保存的cookie文件,post的数据(用户名和密码等信息),是否返回信息等等,然后curl_exec执行curl,最后curl_close()释放资源。注意PHP自带的http_build_query()可以将数组转换成相连接的字符串。

接下来如果登录成功后,我们要获取登录成功后的页面信息。

//登录成功后获取数据 
function get_content($url, $cookie) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie 
    $rs = curl_exec($ch); //执行cURL抓取页面内容 
    curl_close($ch); 
    return $rs; 
}

函数get_content()中也是先初始化curl,然后设置相关选项,执行curl,释放资源。其中我们设置CURLOPT_RETURNTRANSFER为1即自动返回信息,而CURLOPT_COOKIEFILE可以读取到登录时保存的cookie信息,最后将页面内容返回。

我们的最终目的是要获取到模拟登录后的信息,也就是只有正常登录成功后才能获取的有用信息。接下来我们以登录开源中国的移动版为例,看看如何抓取到登录成功后的信息。

//设置post的数据 
$post = array ( 
    'email' => 'oschina账户', 
    'pwd' => 'oschina密码', 
    'goto_page' => '/my', 
    'error_page' => '/login', 
    'save_login' => '1', 
    'submit' => '现在登录' 
); 
 
//登录地址 
$url =; 
//设置cookie保存路径 
$cookie = dirname(__FILE__) . '/cookie_oschina.txt'; 
//登录后要获取信息的地址 
$url2 =; 
//模拟登录 
login_post($url, $cookie, $post); 
//获取登录页的信息 
$content = get_content($url2, $cookie); 
//删除cookie文件 
@ unlink($cookie); 
//匹配页面信息 
$preg = "/<td class='portrait'>(.*)<\/td>/i"; 
preg_match_all($preg, $content, $arr); 
$str = $arr[1][0]; 
//输出内容 
echo $str;

运行上述代码后,我们会看到最终获取到登录用户的头像图片。

使用总结

1、初始化curl;

2、使用curl_setopt设置目标url,和其他选项;

3、curl_exec,执行curl;

4、执行后,关闭curl;

5、输出数据。

标签:setopt,登录,获取数据,cookie,curl,PHP,post,CURLOPT
From: https://blog.51cto.com/u_15967457/6319110

相关文章

  • 我的谷歌账号开了两步验证,登录时不会发验证码说我尝试失败次数过多如何解决?
    如果你的谷歌账号开启了二步验证,而且过了很长一段时间没去登陆,再次登陆谷歌商店的时候就会卡在短信验证中,界面没有出现输入框,后面继续尝试就会提示失败的尝试次数过多,暂时无法登陆,请过几小时后重试。这种情况应该怎么办?上述这种情况对于网络情况不佳、来回切换登陆、手贱点多了几次......
  • pbootcms对接微信扫码登录代码核心片段和步骤(前后端)
    首先需要在微信公众平台或开放平台中创建应用,并获取到AppID和AppSecret。在pbootcms中创建一个自定义模板页面(例如:wechat_login.html),并在该页面中添加以下代码,用于生成微信扫码登录的二维码:<!--引入jquery库--><scriptsrc="https://cdn.bootcss.com/jquery/3.5.1/jque......
  • Linux 服务器中 PHP 版本从 5.x 升级到 7.x
    如果把Linux服务器的PHP版本升级呢?比如目前版本是 PHP5.6.40,升级到7.4当前最最新版本 PHP7.4.30。查看当前PHP版本 php-v卸载已安装的PHPyumremovephp-common安装EPEL源yuminstallepel-release如果已安装过,则提示如下:安装remi 源yuminstallhttp://rpms.rem......
  • PHP 基础
    <?php__FUNCTION__:获取函数名标记和注释<?phpecho'helloworld';?>/*注释*///注释语法结束符<?php?><?php变量//定义变量使用$关键字$a=1;//访问变量echo$a;//修变量$a=2;//删除变量使用unset关键字unset(变量名);变量命名规则......
  • 对于office突然报错登录不上且修复不了的问题
    我可能是在清理启动项的时候把服务的启动项关闭了:具体操作如下:win+r输入services.msc打开服务列表接着找到将属性改为自动即可. ......
  • 登录appuploader
    ​转载:登录appuploader 常规使用登录方法双击appuploader.exe启动appuploader点击底部的未登录,弹出登录框在登录框内输入apple开发者账号如果没有apple开发者账号,只是普通的apple账号,请勾选上未支付688然后软件会提示输入验证码,点击验证,验证成功就可以使用......
  • 登录appuploader
    ​转载:登录appuploader 常规使用登录方法双击appuploader.exe启动appuploader点击底部的未登录,弹出登录框在登录框内输入apple开发者账号如果没有apple开发者账号,只是普通的apple账号,请勾选上未支付688然后软件会提示输入验证码,点击验证,验证成功就可以使用......
  • PHP性能优化工具篇Benchmark类调试执行时间
    这是PHP性能优化系列第二期,如何使用PEAR工具类Benchmark逐行获取代码或函数的执行时间。工欲善其事,必先利其器!如何安装PEAR和Benchmark请参考PHP性能优化系列第一期[PHP性能优化准备篇图解PEAR安装]Benchmark工具类包说明直接下载/package/Benchmark/downloadBenchmark工具类包共......
  • nodejs 解析php的session_decode 的module(session_decode.js)
    文件名:session_decode.js//exports.session_decode=function(){//varmessage="Hellofromtheohaitheremodule";//returnmessage;//};exports.session_decode=function(data){//*example:session_decode('firstName|s:5:&quo......
  • 【ThinkPHP6系列学习-3】模板渲染
    视图功能由\think\View类配合视图驱动(也即模板引擎驱动)类一起完成,新版仅内置了PHP原生模板引擎(主要用于内置的异常页面输出),如果需要使用其它的模板引擎需要单独安装相应的模板引擎扩展。视图相关的配置在配置目录的view.php配置文件中进行定义。通常可以直接使用think\faca......