美文网首页扩展类
curl维持登陆

curl维持登陆

作者: 王宝花 | 来源:发表于2016-05-24 17:35 被阅读114次

实现前提

  1. 第一种方法,之前的代码已经将模拟登陆实现了,并且产生了一个cookiefile文件,这里面存储的是cookie信息,包括sessionID。
  2. 第二种方法,将Head头输出,手动将sessionID保存下来,以备使用。
curl_setopt($curl,CURLOPT_HEADER,1);// 打印头部信息

输出后的信息如下:

    HTTP/1.1 200 OK Date: Wed, 18 May 2016 09:55:49 GMT 
    Server: Apache/2.4.7 (Ubuntu) X-Powered-By: PHP/5.5.9-1ubuntu4.14 
    Cache-Control: no-cache 
    Set-Cookie: laravel_session=eyJpdiI6IkhaS1FyNnUyeWhTVUNqV2xTN2w4Rmc9PSIsInZhbHVlIjoiZ0d3ZytPXC9KUGh6NWFEeFg4UXNWTnVPNW5rbG9TZ1Azc0tpcWRPZEx0Q09Vc3BGSFd3V3VKNE9xM2NMenh3clBrVm4zeHVjaUd3dUpJbEJSVVJ2NXpBPT0iLCJtYWMiOiI5ZjllNjVlZDQ4NDAwNDhhYTU3ZGI2YTU0OTJmYmQ4M2JlMzRjYWQ1NmU4NDY0YzZjMDE0OTAyZWEwYzU3NjU0In0%3D; expires=Wed, 18-May-2016 11:55:49 GMT; Max-Age=7200; path=/; httponly Vary: Accept-Encoding Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8

实现步骤

  1. 获取sessionID

在实现前提中已经获取到了,到这一步只需要正则匹配到数据或者是直接手动赋值,就可以了。

  1. 将sessionID在发送请求CURL之前存入session中。
curl_setopt($curl,CURLOPT_COOKIE,"laravel_session"."=".$a);
  1. 改一个本网站其他的URL地址。
curl_setopt($curl, CURLOPT_URL, 'http://www.ydma.cn/');

测试:首先模拟登陆,然后在服务器打开此脚本,就会看到,维持登陆成功。
失败原因:

cookie文件没内容,需要先关闭curl culr_close($curl)
cookie文件没自动生成,可能是因为缓存的原因,清一下缓存或者换一个账户登陆。
laravel_session 过期了,将cookiefile删除,重新生成或者清楚缓存,重新登陆。

源码奉上

<?php
// 设定时区
date_default_timezone_set("PRC");
// 初始化
$curl = curl_init();

// 获取session -- 代码获取
// $cookiefile = file_get_contents("./cookiefile");
// 匹配sessionid
// $arr = substr($cookiefile,strpos($cookiefile,"laravel_session"),strlen($cookiefile));
// $a = substr($arr,16,strlen($arr));

// 获取session -- 手动获取
$a = "eyJpdiI6ImtaOWRPNjQyc2U5R2VvNlFmZGJyOUE9PSIsInZhbHVlIjoiN2pFZDd6QlJHaFlzdHY0Kzl4WjFwdFFuMFZOWmtUbkl2NTJFZHdQYVFKVDBEMmRSUHoxR0liV2ZyMWdNTFFheDJGRU45VG9lWTdWTytDbGRpeXJTOHc9PSIsIm1hYyI6IjgyZmVmN2Q2NDVhMzhmOTY3ODdlMmMyYmE5YzRkNDJlZTc1OWRmOTgyMGIzZDI0NTViNWQzMDNhMTMyZjNlNDMifQ%3D%3D";

curl_setopt($curl,CURLOPT_REFERER,"http://www.ydma.cn/");// 设定来源页

// 基本配置
curl_setopt($curl, CURLOPT_URL, 'http://www.ydma.cn/');// 网址
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);// 不输出

// Cookie相关设置
curl_setopt($curl,CURLOPT_COOKIE,"laravel_session"."=".$a);// 存储的是session_name()和session_id()
curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);// 设置可以跳转
curl_setopt($curl,CURLOPT_HEADER,0);// 不去打印头部信息

$res = curl_exec($curl);
curl_close($curl);
echo $res;

相关文章

网友评论

    本文标题:curl维持登陆

    本文链接:https://www.haomeiwen.com/subject/ihpwrttx.html