PHP CURL获取cookies模拟登录的方法


Posted in PHP onNovember 04, 2013

要提取google搜索的部分数据,发现google对于软件抓取它的数据屏蔽的厉害,以前伪造下 USER-AGENT 就可以抓数据,但是现在却不行了。利用抓包数据发现,Google 判断了 cookies,当你没有cookies的时候,直接返回 302 跳转,而且是连续几十个302跳转,根本抓不了数据。
因此,在发送搜索命令时,需要先提取 cookies 并保存,然后利用保存下来的这个cookies再次发送搜索命令即可正常抓数据了。这其实和论坛的模拟登录一个道理,先POST登录,获取cookies并保存,然后利用这个cookies访问就可以了。
PHP 代码如下:

<?php
header('Content-Type: text/html; charset=utf-8');$cookie_file = dirname(__FILE__).'/cookie.txt';
//$cookie_file = tempnam("tmp","cookie");
//先获取cookies并保存
$url = "http://www.google.com.hk";
$ch = curl_init($url); //初始化
curl_setopt($ch, CURLOPT_HEADER, 0); //不返回header部分
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //返回字符串,而非直接输出
curl_setopt($ch, CURLOPT_COOKIEJAR,  $cookie_file); //存储cookies
curl_exec($ch);
curl_close($ch);
//使用上面保存的cookies再次访问
$url = "http://www.google.com.hk/search?oe=utf8&ie=utf8&source=uds&hl=zh-CN&q=qq";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //使用上面获取的cookies
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
PHP 相关文章推荐
php whois查询API制作方法
Jun 23 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 PHP
php根据分类合并数组的方法实例详解
Nov 06 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
使用ob系列函数实现PHP网站页面静态化
Aug 13 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
php使用ob_flush不能每隔一秒输出原理分析
Jun 02 PHP
php 时间time与日期date之间的使用详解及区别
Nov 07 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
PHP PDOStatement::errorCode讲解
Jan 31 PHP
php Session存储到Redis的方法
Nov 04 #PHP
在PHP中使用redis
Nov 04 #PHP
6种php上传图片重命名的方法实例
Nov 04 #PHP
php preg_replace替换实例讲解
Nov 04 #PHP
php define的第二个参数使用方法
Nov 04 #PHP
Linux编译升级php的详细方法
Nov 04 #PHP
php获取操作系统语言代码
Nov 04 #PHP
You might like
如何在PHP中使用Oracle数据库(6)
2006/10/09 PHP
php简单实现数组分页的方法
2016/04/30 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
python获取url的返回信息方法
2018/12/17 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
web页面录屏实现
2019/02/12 HTML / CSS
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
linux下进程间通信的方式
2014/12/23 面试题
运动会解说词50字
2014/01/18 职场文书
租房合同协议书
2014/04/09 职场文书
期中考试复习计划
2015/01/19 职场文书
2015年库房管理工作总结
2015/10/14 职场文书