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 相关文章推荐
vBulletin Forum 2.3.xx SQL Injection
Oct 09 PHP
php中取得文件的后缀名?
Feb 20 PHP
基于MySQL体系结构的分析
May 02 PHP
如何用C语言编写PHP扩展的详解
Jun 13 PHP
php实现执行某一操作时弹出确认、取消对话框
Dec 30 PHP
ThinkPHP之A方法实例讲解
Jun 20 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
Mar 21 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
php中Redis的应用--消息传递
Mar 28 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 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如何编写易读的代码
2007/07/10 PHP
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
三种php连接access数据库方法
2013/11/11 PHP
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
HTML5附件拖拽上传drop &amp; google.gears实现代码
2011/04/28 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
[41:17]VG vs Optic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
护理毕业生自荐信范文
2013/12/22 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
大学生学习计划书
2014/09/15 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书