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制作静态网站的模板框架(三)
Oct 09 PHP
自己前几天写的无限分类类
Feb 14 PHP
PHP开发的一些注意点总结
Oct 12 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
php Hex RGB颜色值互换的使用
May 10 PHP
php中get_object_vars()方法用法实例
Feb 08 PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 PHP
php提高网站效率的技巧
Sep 29 PHP
PHP随机数 C扩展随机数
May 04 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 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更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
php GUID生成函数和类
2014/03/10 PHP
Sublime里直接运行PHP配置方法
2014/11/28 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
PHP7 新增常量
2021/03/09 PHP
javascript算法学习(直接插入排序)
2011/04/12 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
Python调用C语言开发的共享库方法实例
2015/03/18 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
2016/06/07 Python
Python global全局变量函数详解
2018/09/18 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
中国医药集团国药在线:国药网
2017/02/06 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
汉语言文学毕业生求职信
2013/10/01 职场文书
护士思想汇报
2014/01/12 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
JS数组去重详情
2021/11/07 Javascript