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+mysql一个名片库程序
Oct 09 PHP
JpGraph php柱状图使用介绍
Aug 23 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
Nov 02 PHP
php全排列递归算法代码
Oct 09 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
Apr 05 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
php实现通过ftp上传文件
Jun 19 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
laravel Model 执行事务的实现
Oct 10 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 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使用递归计算文件夹大小
2014/12/24 PHP
laravel-admin的图片删除实例
2019/09/30 PHP
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
2016/10/24 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
实例讲解python函数式编程
2014/06/09 Python
python数组复制拷贝的实现方法
2015/06/09 Python
Python闭包函数定义与用法分析
2018/07/20 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
2020/01/10 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
美国网上书店:Barnes & Noble
2018/08/15 全球购物
使用索引有什么好处
2016/07/27 面试题
电子商务专员岗位职责
2013/12/11 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP