2 Stimmen

Wie kann ich einen Download in einem Perl-Programm drosseln?

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.

6voto

jrockway Punkte 40754

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.

3voto

Emil Sit Punkte 21922

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X