php使用curl代理实现抓取数据的方法


Posted in PHP onFebruary 03, 2017

本文实例讲述了php使用curl代理实现抓取数据的方法。分享给大家供大家参考,具体如下:

<?php
define ( 'IS_PROXY', true ); //是否启用代理
function async_get_url($url_array, $wait_usec = 0)
{
  if (!is_array($url_array))
    return false;
  $wait_usec = intval($wait_usec);
  $data  = array();
  $handle = array();
  $running = 0;
  $mh = curl_multi_init(); // 开启多线程
  $i = 0;
  foreach($url_array as $url) {
    $ch = curl_init();
    if (IS_PROXY) {
    //以下代码设置代理服务器
    //代理服务器地址http://www.cnproxy.com/proxy1.html !!Hong Kong, China的速度比较好
    curl_setopt ($ch, CURLOPT_PROXY,'110.4.12.170:80' );
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return don't print
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置超时时间
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
    curl_setopt($ch, CURLOPT_MAXREDIRS, 7); //HTTp定向级别
    curl_multi_add_handle($mh, $ch); // 把 curl resource 放进 multi curl handler 里
    $handle[$i++] = $ch;
  }
  /* 执行 */
  do {
    $mrc = curl_multi_exec($mh, $running);
    if ($wait_usec > 0) /* 每个 connect 要间隔多久 */
      usleep($wait_usec); // 250000 = 0.25 sec
  } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  while ($running && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
      do {
        $mrc = curl_multi_exec($mh, $running);
      } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
  }
  /* 读取资料 */
  foreach($handle as $i => $ch) {
    $content = curl_multi_getcontent($ch);
    $data[$i] = (curl_errno($ch) == 0) ? $content : false;
  }
  /* 移除 handle*/
  foreach($handle as $ch) {
    curl_multi_remove_handle($mh, $ch);
  }
  curl_multi_close($mh);
  return $data;
}
$urls = array('http://map.baidu.com');
$re = async_get_url($urls);
echo $re[0];
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
全文搜索和替换
Oct 09 PHP
一步一步学习PHP(4) php 函数 补充2
Feb 15 PHP
php学习笔记 数组遍历实现代码
Jun 09 PHP
给初学者的30条PHP最佳实践(荒野无灯)
Aug 02 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
Nov 10 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
php不写闭合标签的好处
Mar 04 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
YII视图整合kindeditor扩展的方法
Jul 13 PHP
tp5框架使用composer实现日志记录功能示例
Jan 10 PHP
php生成word并下载代码实例
Mar 15 PHP
php实现xml转换数组的方法示例
Feb 03 #PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 #PHP
php指定长度分割字符串str_split函数用法示例
Jan 30 #PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 #PHP
PHPExcel在linux环境下导出报500错误的解决方法
Jan 26 #PHP
超强多功能php绿色集成环境详解
Jan 25 #PHP
php 中奖概率算法实现代码
Jan 25 #PHP
You might like
强烈推荐:php.ini中文版(2)
2006/10/09 PHP
[转帖]PHP世纪万年历
2006/12/06 PHP
php中{}大括号是什么意思
2013/12/01 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
[03:56]显微镜下的DOTA2第十一期——鬼畜的死亡先知播音员
2014/06/23 DOTA
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
利用Python如何将数据写到CSV文件中
2018/06/05 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
python获取引用对象的个数方式
2019/12/20 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
时尚休闲吧创业计划书
2014/01/25 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
买卖协议书范本
2014/04/21 职场文书
竞选班委演讲稿
2014/04/28 职场文书
酒店总经理岗位职责范本
2014/08/08 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
一篇文章带你复习java知识点
2021/06/28 Java/Android