Gibt es ein Perl-Modul zur Download-Drosselung? Ich möchte eine bestimmte Datei herunterladen, aber die Download-Rate auf eine bestimmte Anzahl von KB/sec begrenzen.
Antworten
Zu viele Anzeigen?Es sieht so aus, als ob WWW::Curl und die Option CURLOPT_MAX_RECV_SPEED_LARGE was Sie wollen:
#!/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";
In diesem Beispiel laden wir Google mit einem Byte pro Sekunde herunter. Sehr langsam.
Eine Technik, die nicht auf Perl und nicht auf ein bestimmtes Protokoll beschränkt ist, ist die Verwendung von tröpfeln :
trickle ist ein portabler, leichtgewichtiger User-Space-Bandbreiten-Shaper. Er kann im kollaborativen Modus (zusammen mit trickle) oder im eigenständigen Modus laufen.
Siehe auch Wie kann man die Bandbreite einer Socket-Verbindung in C drosseln?
Es wäre schön, diese Technik als Perl-Modul zu verpacken (z.B. als Unterklasse von IO::Handle), aber ich kenne kein solches.