Pregunta

¿Hay algún módulo de Perl disponible para su descarga de estrangulación? Me gustaría descargar un archivo determinado, pero limitar la velocidad de descarga a un número específico de KB / seg.

¿Fue útil?

Solución

Parece que WWW :: Curl y la opción es CURLOPT_MAX_RECV_SPEED_LARGE lo que quiere:

#!/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";

En este ejemplo, descargamos Google en un byte por segundo. Muy lento.

Otros consejos

Una técnica no se limita a Perl y no limitado a un protocolo particular es utilizar goteo :

  

goteo es un formador de ancho de banda de espacio de usuario portátil ligero. Puede funcionar en modo de colaboración (junto con Trickled) o en modo autónomo.

Cómo hacer que estrangular el ancho de banda de una conexión de socket en C?

Sería bueno para empaquetar esta técnica como un módulo de Perl (por ejemplo, que las subclases de IO :: Handle), pero no estoy al tanto de uno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top