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文件存储抓取需要登录的页面数据啦。

    有一份光,发一份热
  • 相关阅读:
    315. 计算右侧小于当前元素的个数
    55. 跳跃游戏
    <leetcode c++>72. 编辑距离
    "NTLDR is missing"和"NTLDR is compressed"的解决办法
    Windows Live Mail不能发送图片附件的2种解决方法
    【】使用word2010同步更新自己在不同网站的博客
    新浪博客测试
    【】引用 CSS行高line-height属性理解及应用
    "NTLDR is missing"和"NTLDR is compressed"的解决办法
    排序算法-冒泡排序(javascript)
  • 原文地址:https://www.cnblogs.com/jniantic/p/13516700.html
Copyright © 2011-2022 走看看