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 数组遍历方法大全(foreach,list,each)
Jun 30 PHP
PHP通过header实现文本文件下载的代码
Aug 08 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
Jul 04 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
Nov 14 PHP
php使用Jpgraph绘制柱形图的方法
Jun 10 PHP
PHP+Mysql基于事务处理实现转账功能的方法
Jul 08 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
Nov 30 PHP
CI框架支持$_GET的两种实现方法
May 18 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
Feb 28 PHP
Yii框架ACF(accessController)简单权限控制操作示例
Apr 26 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实现字符串翻转的方法
2015/03/27 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
javascript 学习之旅 (3)
2009/02/05 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
实用自动化运维Python脚本分享
2018/06/04 Python
Python常见的pandas用法demo示例
2019/03/16 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
Python Lambda函数使用总结详解
2019/12/11 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
Ruby如何进行文件操作
2014/07/17 面试题
消防安全标语
2014/06/07 职场文书
学习“七一”讲话精神体会
2014/07/08 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
2014年党建工作总结
2014/11/11 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
mysql查看表结构的三种方法总结
2022/07/07 MySQL