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 实用代码收集
Jan 22 PHP
php实现无限级分类实现代码(递归方法)
Jan 01 PHP
php实现rc4加密算法代码
Apr 25 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
Jun 05 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
Aug 22 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
php取得字符串首字母的方法
Mar 25 PHP
PHP数组相加操作及与array_merge的区别浅析
Nov 26 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
PHP实现对数字分隔加千分号的方法
Mar 18 PHP
详解Go与PHP的语法对比
May 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
让PHP支持断点续传的源码
2010/05/16 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
php中动态调用函数的方法
2015/03/16 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
2018/05/14 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
Django开发中复选框用法示例
2018/03/20 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
初三化学教学反思
2014/01/23 职场文书
学徒工职责
2014/03/06 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
任命通知范文
2015/04/21 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
创业计划书之熟食店
2019/10/16 职场文书