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