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 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
php下的权限算法的实现
Apr 28 PHP
php smarty模版引擎中的缓存应用
Dec 02 PHP
PHP中的array数组类型分析说明
Jul 27 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
php_screw 1.5:php加密: 安装与使用详解
Jun 20 PHP
PHP垃圾回收机制引用计数器概念分析
Jun 24 PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
PHP自动识别当前使用移动终端
May 21 PHP
php创建类并调用的实例方法
Sep 25 PHP
基于PHP实现生成随机水印图片
Dec 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
Oracle 常见问题解答
2006/10/09 PHP
用PHP和ACCESS写聊天室(十)
2006/10/09 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
删除PHP数组中的重复元素的实现代码
2017/04/10 PHP
javascript开发中因空格引发的错误
2010/11/08 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
python实现在windows服务中新建进程的方法
2015/06/30 Python
Python如何获取系统iops示例代码
2016/09/06 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
pygame实现成语填空游戏
2019/10/29 Python
Python内存映射文件读写方式
2020/04/24 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
vue路由实现登录拦截
2021/03/24 Vue.js
开办化妆品公司创业计划书
2013/12/26 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
寒山寺导游词
2015/02/03 职场文书
二年级作文之动物作文
2019/11/13 职场文书
python基础之类属性和实例属性
2021/10/24 Python
尝试使用Python爬取城市租房信息
2022/04/12 Python