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语法(2)
Oct 09 PHP
PHP中echo和print的区别
Aug 28 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
Nov 27 PHP
解决yii2左侧菜单子级无法高亮问题的方法
May 08 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 PHP
PHP7.1新功能之Nullable Type用法分析
Sep 26 PHP
php取出数组单个值的方法
Mar 12 PHP
PHP安装BCMath扩展的方法
Feb 13 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
Sep 30 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
Mar 09 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 变量类型的强制转换
2009/10/23 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
PHP图片水印类的封装
2017/07/06 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
小程序实现按下录音松开识别语音
2019/11/22 Javascript
python中异常捕获方法详解
2017/03/03 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
python Django的web开发实例(入门)
2019/07/31 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
Python numpy数组转置与轴变换
2019/11/15 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
营销总经理的岗位职责
2013/12/15 职场文书
公司开业庆典主持词
2014/03/21 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
解决xampp安装后Apache无法启动
2022/03/21 Servers
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL