NAME

Net::BitTorrent::Tracker::WebSeed - HTTP WebSeed Client (BEP 19 / BEP 17)

SYNOPSIS

use Net::BitTorrent::Tracker::WebSeed;

my $ws = Net::BitTorrent::Tracker::WebSeed->new(
    url => "https://archive.org/download/my_torrent/"
);

# Fetch a piece using segments mapped by the storage layer
my $data = $ws->fetch_piece([
    { rel_path => "file1.bin", offset => 0, length => 16384 }
]);

say "Successfully fetched piece" if $data;

DESCRIPTION

Net::BitTorrent::Tracker::WebSeed implements BEP 19 (WebSeeding). It allows a client to download pieces of a torrent from a standard HTTP or FTP server. This is highly effective for ensuring swarm availability when no regular BitTorrent seeders are online.

METHODS

new( %params )

Creates a new WebSeed object.

my $ws = Net::BitTorrent::Tracker::WebSeed->new(
    url => $base_url
);

Expected parameters:

url

The base URL of the web seed.

fetch_piece( $segments )

Attempts to fetch a piece from the web seed.

my $data = $ws->fetch_piece( $segments );

Expected parameters:

$segments

An array reference of segments, each containing file, offset, and length.

Uses HTTP Range requests to fetch only the specific bytes required for the piece. Automatically follows up to 5 redirects. Handles 410 Gone status codes by permanently disabling the web seed instance.

fetch_piece_legacy( $index, $piece_length, $total_size )

Legacy method for fetching a single piece from a single-file torrent.

my $data = $ws->fetch_piece_legacy( 0, 262144, 1048576 );

Expected parameters:

$index

The piece index.

$piece_length

The piece length in bytes.

$total_size

The total size of the file.

url( )

Returns the base URL of the web seed.

disabled( )

Returns true if the web seed has been disabled (e.g., due to 410 Gone).

Architecture

For multi-file torrents, if the URL ends in a slash (/), the module automatically appends the relative path of each file within the swarm to build the target URL.

This module is designed to be called by Net::BitTorrent::Torrent when a piece cannot be found in the P2P swarm.

Specifications

  • BEP 19: WebSeed - HTTP/FTP Seeding (GetRight style)

  • BEP 17: HTTP Seeding (Hoffman-style)

AUTHOR

Sanko Robinson <sanko@cpan.org>

COPYRIGHT

Copyright (C) 2008-2026 by Sanko Robinson.

This library is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0.