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 相关文章推荐
新安装的MySQL数据库需要注意的安全知识
Jul 30 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
Yii框架获取当前controlle和action对应id的方法
Dec 03 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
CodeIgniter多语言实现方法详解
Jan 20 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
老生常谈PHP数组函数array_merge(必看篇)
May 25 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
Aug 01 PHP
PHP环形链表实现方法示例
Sep 15 PHP
laravel-admin自动生成模块,及相关基础配置方法
Oct 08 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模拟HTTP认证
2006/10/09 PHP
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
Python登录并获取CSDN博客所有文章列表代码实例
2017/12/28 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
Python3.5实现的罗马数字转换成整数功能示例
2019/02/25 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
2014年幼儿园元旦活动方案
2014/02/13 职场文书
创新型城市实施方案
2014/03/06 职场文书
党员干部公开承诺书
2014/03/26 职场文书
学校标语大全
2014/06/19 职场文书
党建目标管理责任书
2014/07/25 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
Mysql Show Profile
2021/04/05 MySQL
pytorch实现线性回归以及多元回归
2021/04/11 Python
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
Opencv实现二维直方图的计算及绘制
2021/07/21 Python
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS