2009-02-12 5 views

Répondre

6

Ressemble WWW :: Curl et l'option CURLOPT_MAX_RECV_SPEED_LARGE est ce que vous voulez:

#!/usr/bin/env perl 

use strict; 
use warnings; 
use feature ':5.10'; 
use WWW::Curl::Easy; 

# Setting the options 
my $curl = WWW::Curl::Easy->new; 

$curl->setopt(CURLOPT_HEADER,1); 
$curl->setopt(CURLOPT_URL, 'http://www.google.com'); 
$curl->setopt(CURLOPT_MAX_RECV_SPEED_LARGE, 1); 

my $response_body; 
open my $fh, ">", \$response_body or die; # presumably this can be a real file as well. 
$curl->setopt(CURLOPT_WRITEDATA,$fh); 

my $ret = $curl->perform; 
die 'Error: '. $curl->strerror($ret) if $ret; 

my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE); 
say "Received response: $response_body"; 

Dans cet exemple, nous télécharger Google à un octet par seconde. Très lent.

3

Une technique sans s'y limiter, Perl et non limité à un protocole particulier consiste à utiliser trickle:

filet est un conformateur portable de la bande passante de l'espace utilisateur léger. Il peut fonctionner en mode collaboratif (avec ruissellement) ou en mode autonome.

Voir aussi How do you throttle the bandwidth of a socket connection in C?

Ce serait bien d'emballer cette technique comme un module Perl (par exemple que IO :: Handle sous-classe), mais je ne suis pas au courant d'un.

Questions connexes