使用curl控制下载速度
1. 速度控制
1.1 php代码方式
function http_request($URI)
{$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $URI);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//速度控制$speed = 100000;curl_setopt($ch, CURLOPT_MAX_RECV_SPEED_LARGE, 100000);$result = curl_exec($ch);if (!$result){echo curl_error($ch);return false;}curl_close($ch);return $result;
}$url = "http://toutiao.sogoucdn.com/ykvideo/20181130/0575139af28f38c336912739acf33a88.mp4";
$res = http_request($url);
file_put_contents("./video", $res);
说明:
- CURLOPT_MAX_RECV_SPEED_LARGE,即是控制下载速度的参数,数值单位为byte。上例中,我们期望的速度为100k(byte)。
- 网速其实指的是bit, 所以100k byte对应的网速是800k bit。 需要注意下这里的换算关系。
1.2 命令行方式
curl "http://toutiao.sogoucdn.com/ykvideo/20181130/0575139af28f38c336912739acf33a88.mp4" -o video --limit-rate 100k
说明:
- –limit-rate就是命令行curl控制速度的参数。
- 速度单位仍然是byte。
2. 速度测定
我们使用iftop对网卡的下载速度进行测定,以观测控速是否起到了应有的效果。不了解iftop的同学,可以点击这里。
2.1 php方式
运行1.1中的代码,我们在iftop中看到如下记录:
10.144.73.171 => 111.202.99.142 6.56Kb 6.78Kb 6.76Kb<= 1.02Mb 1.00Mb 0.99Mb
平均下载速度在900kb~1.1M(bit)之间波动。
2.2 shell方式
iftop中看到记录如下:
10.144.73.171 => 111.202.99.191 6.72Kb 6.59Kb 6.81Kb<= 1.04Mb 1.04Mb 1.04Mb
平均下载速度在850kb~1.1M(bits)之间波动。与代码方式基本一致。
3.3 结论
- 使用命令行curl ,和php curl均可对下载速度进行控制。
- 速度的控制并不能做到很精确,只能保证下载平均速度在预期值附近。实测中发现,个别时点可能会突破预期值很多。
- 设定的速率越低,速度波动会越大。比如限定速度为1k bit, 实际观察到的速度波动会在320b~50kb之间。显然波动高于上例中限定速率为800k bit的情况。
- 不同工具使用的单位不同, 注意byte与bit的转换。
使用curl控制下载速度相关推荐
- Linux下使用curl进行http请求(转)
curl在Linux下默认已经安装,Windows需要自行安装. 下载地址:https://curl.haxx.se/download.html Windows离线版本:链接:http://pan.b ...
- 【Linux】一步一步学Linux——curl命令(193)
00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 curl命令是一个利用URL规则在shell终端命令行下工 ...
- Linux 命令(136)—— curl 命令
文章目录 1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 1.命令简介 curl 命令是一个利用 URL 规则在 Shell 终端命令行下工作的文件传输工具.它支持文件的上传和下载, ...
- Linux curl 命令模拟 POST/GET 请求
curl 命令,是一个利用URL规则在命令行下工作的文件传输工具. curl 支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具. 作为一款强力工具,curl支持包括HTTP ...
- Curl运维命令 - 日常用法总结
在Linux系统中,curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载操作,是综合传输工具,习惯上称url为下载工具.下面就日常运 ...
- [Shell学习笔记] 命令行下的高级网络工具cURL命令
原文: http://www.1987.name/365.html Linux curl命令是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯 ...
- libcurl下载限速编程调研
目前的业务需求是, 要求下载过程中, 能够恰当控制下载速度? 如何实现? 我想到了libcurl中提供的下载限速选项.现在探讨如下. 我找到Ubuntu 14.04.01的iso大文件, 使用libc ...
- Shell脚本学习-阶段二十七-命令解释一
文章目录-命令解释一 前言 as expr gcc gcov gdb indent ld ldconfig ldd make mktemp nm objdump perl php protoize u ...
- shell常用命令高级部分
日志统计常用手法: awk '{print $1}' |sort -n |uniq -c |sort -nr|head -10 找第一列中,排序,再统计每种多少,排序反序,再取前10名.ifconfi ...
- qos 流控功能_怎么设置飞鱼星QoS流量控制中的传统流控
飞鱼星Volans公司致力于提供智能易用的网络通讯产品与服务,其通过创新技术不断提升网络使用质量,那么你知道怎么设置飞鱼星QoS流量控制中的传统流控吗?下面是学习啦小编整理的一些关于怎么设置飞鱼星Qo ...
最新文章
- linux架构师高级系统调优策略
- 使用Python解析nginx日志文件
- Redis 数据同步机制分析
- Set集合以及HashSet、LinkedHashSet、TreeSet等讲解
- 阿里启动NASA计划创造新经济核心科技
- Preparing Cities for Robot Cars【城市准备迎接自动驾驶汽车】
- 类模板特化之经典(一)
- 组策略中分类别禁用设备驱动程序安装,可以用来禁用USB设备
- __asm__ __volatile__内嵌汇编用法简述
- 工业机器人维保调查表_《工业机器人系统集成及维护》课程建设调研报告
- python mysql实例_Python使用MySQL数据库的方法以及一个实例
- 排列组合 vs 全排列与指数
- 2021牛客寒假算法基础集训营2,签到题FHIJ
- 如何实现用Delphi访问Outlook Express的收发邮件箱中的邮件?
- shell 除法保留n位小数
- 洛谷p3764签到题3
- 企业邮箱哪个最好用?哪个企业邮箱更优惠?费用是多少?
- 虚拟机VMware安装苹果系统macOS,超级详细教程,附文件下载,真教程!!
- Zimbra部署https证书的操作方法
- 自动阅读 到底 能不能赚钱