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新手上路(三)
Oct 09 PHP
Php注入点构造代码
Jun 14 PHP
php intval的测试代码发现问题
Jul 27 PHP
PHP 分页原理分析,大家可以看看
Dec 21 PHP
域名和cookie问题(域名后缀)
Oct 10 PHP
PHP不用递归实现无限分级的例子分享
Apr 18 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
Zend Framework入门教程之Zend_Mail用法示例
Dec 08 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
php微信开发之音乐回复功能
Jun 14 PHP
php-fpm重启导致的程序执行中断问题详解
Apr 29 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
新52大事件
2020/03/03 欧美动漫
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php抓取https的内容的代码
2010/04/06 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
JavaScript的parseInt 进制问题
2009/05/07 Javascript
JS 进度条效果实现代码整理
2011/05/21 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
javascript日期格式化方法小结
2015/12/17 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
用Python写冒泡排序代码
2016/04/12 Python
python计算auc指标实例
2017/07/13 Python
关于Django外键赋值问题详解
2017/08/13 Python
pyqt 多窗口之间的相互调用方法
2019/06/19 Python
python psutil模块使用方法解析
2019/08/01 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
物流经理自我评价
2013/09/23 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
2014年实习生工作总结
2014/11/27 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL