zoukankan      html  css  js  c++  java
  • PHP中curl登录免cookie文件存储抓取网页

    | 问题的出现
        
    用curl抓取需要登录的网页数据时,首先要把登录后获取的cookie通过文件存储下来:

      curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中

      但文件存储的效率并不高,而且把它放在网站的目录下也要给予一定的权限,会造成网站的不安全性。

      所以就想到有没有办法可以避开文件存储从而实现直接变量存储查询。

    | 解决方法

    先来看代码:
        function login_post($url, $post) {

        $curl = curl_init();//初始化curl模块

        curl_setopt($curl, CURLOPT_URL, $url);

        curl_setopt($curl, CURLOPT_HEADER, 1);

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($curl, CURLOPT_POST, 1);//post方式提交

        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));

        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

    $content = curl_exec($curl); //执行curl并赋值给$content

    $preg_cookie = '/Set-Cookie: (.*?);/m';

    if(preg_match_all($preg_cookie,$content,$cookie)){

            $cookie = implode(';', $cookie['1']);

    }

    curl_close($curl);//关闭cURL资源,并且释放系统资源

    return $cookie;

    }

      首先要获取返回的结果(需要设置返回头部信息),可以看到返回cookie信息都是Set-Cookie这种格式的,通过正则匹配把cookie(cookie的格式为cookieName = value)取出去加上分号组成字符串变量,即可给curl_setopt($curl , CURLOPT_COOKIE ,$cookie);使用啦。

      这样我们就可以实现无cookie文件存储抓取需要登录的页面数据啦。

    有一份光,发一份热
  • 相关阅读:
    整理一下看过的图像识别的文章(人脸、车牌、验证码)
    从大象安全套到超级表格
    HDU 3157 Crazy Circuits(有源汇上下界最小流)
    struts2学习笔记(5)---自己定义拦截器
    【分享】4412开发板-嵌入式Linux开发须要掌握的基础知识和技能
    ConvertHelper与泛型集合
    G711
    关于众筹的一些经验,希望能有帮助
    Java基础 Day14 泛型
    LeetCode144:Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/jniantic/p/13516700.html
Copyright © 2011-2022 走看看