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 相关文章推荐
php项目打包方法
Feb 18 PHP
PHP 批量删除 sql语句
Jun 05 PHP
php 如何获取数组第一个值
Aug 06 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
php数组合并array_merge()函数使用注意事项
Jun 19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
Jun 26 PHP
PHP中绘制图像的一些函数总结
Nov 19 PHP
yii的CURD操作实例详解
Dec 04 PHP
PHP读取汉字的点阵数据
Jun 22 PHP
php7安装yar扩展的方法详解
Aug 03 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
Thinkphp 框架扩展之应用模式实现方法分析
Apr 27 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的无限分类实现想法~
2007/01/02 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
javascript常用函数(1)
2015/11/04 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
python3音乐播放器简单实现代码
2020/04/20 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
Python matplotlib实时画图案例
2020/04/23 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
客户经理岗位职责
2013/12/08 职场文书
大学生职业生涯规划书模板
2014/01/03 职场文书
运动会广播稿50字
2014/01/26 职场文书
社区安全检查制度
2014/02/03 职场文书
小学中队活动总结
2015/05/11 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
网络研修心得体会
2016/01/08 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
Nginx使用Lua模块实现WAF的原理解析
2021/09/04 Servers