使用curl控制下载速度

5 篇文章 0 订阅

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);

说明:

  1. CURLOPT_MAX_RECV_SPEED_LARGE,即是控制下载速度的参数,数值单位为byte。上例中,我们期望的速度为100k(byte)。
  2. 网速其实指的是bit, 所以100k byte对应的网速是800k bit。 需要注意下这里的换算关系。

1.2 命令行方式

curl "http://toutiao.sogoucdn.com/ykvideo/20181130/0575139af28f38c336912739acf33a88.mp4" -o video --limit-rate 100k

说明:

  1. –limit-rate就是命令行curl控制速度的参数。
  2. 速度单位仍然是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 结论

  1. 使用命令行curl ,和php curl均可对下载速度进行控制。
  2. 速度的控制并不能做到很精确,只能保证下载平均速度在预期值附近。实测中发现,个别时点可能会突破预期值很多。
  3. 设定的速率越低,速度波动会越大。比如限定速度为1k bit, 实际观察到的速度波动会在320b~50kb之间。显然波动高于上例中限定速率为800k bit的情况。
  4. 不同工具使用的单位不同, 注意byte与bit的转换。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用curl可以方便地进行文件的上传和下载操作。对于文件上传,可以使用curl命令的--form选项,将需要上传的文件通过POST请求发送到目标地址。例如,可以使用以下命令上传文件filename.txt到hostname的resource路径下: curl --form "fileupload=@filename.txt" http://hostname/resource 对于文件的下载,可以使用curl命令的-O选项,直接下载文件到当前目录下。例如,可以使用以下命令下载地址为http://www.gnu.org/software/gettext/manual/gettext.html的文件: curl -O http://www.gnu.org/software/gettext/manual/gettext.html 如果需要对大文件进行下载,并且希望能够实现断点续传的功能,可以使用curl命令的-C选项。通过添加-C选项,已经下载过的文件不会被重新下载,而是继续下载。例如,可以使用以下命令实现对同一文件的续传: curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html 此外,还可以使用--limit-rate选项对curl的最大网络使用进行限制,以限制下载或上传文件时的网络速度。可以通过设置限制速度的值来控制网络使用的带宽。例如,可以使用以下命令限制curl下载速度为100KB/s: curl --limit-rate 100k http://www.example.com/file 在PHP中,也可以使用CURL库来实现文件的上传和下载功能。可以通过发送POST请求来上传文件,设置某个字段为需要上传的文件的全路径,并以"@"开头。然后使用CURL库将请求发送出去。具体的实现可以参考PHP文档中关于CURL上传文件的相关内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [curl命令上传下载文件](https://blog.csdn.net/wulong710/article/details/53127606)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [PHP实现通过CURL上传文件功能示例](https://download.csdn.net/download/weixin_38582685/14910324)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值