Проектная лаборатория
Собственный BitTorrent
Этап 12 · Magnet-ссылки
Разбор magnet-ссылки
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
Добро пожаловать в расширение «Magnet-ссылки BitTorrent»! В нём вы добавите поддержку скачивания файлов по magnet-ссылкам.
На этом этапе вы разберёте magnet-ссылку и выведете информационный хеш и URL трекера.
Magnet-ссылки
Magnet-ссылки позволяют скачивать файлы у пиров без торрент-файла.
Пример magnet-ссылки:
magnet:?xt=urn:btih:ad42ce8109f54c99613ce38f9b4d87e70f24a165&dn=magnet1.gif&tr=http%3A%2F%2Fbittorrent-test-tracker.codecrafters.io%2FannounceВ отличие от файлов .torrent, magnet-ссылки не содержат длину файла, длину фрагмента и хеши фрагментов. В них есть только минимум информации для поиска пиров. Остальные сведения клиент может запросить у пиров через протокол обмена метаданными. Вы реализуете это на следующих этапах.
Параметры запроса в magnet-ссылке:
xt:urn:btih:, за которым следует информационный хеш в виде 40-символьной шестнадцатеричной строки (пример:urn:btih:ad42ce8109f54c99613ce38f9b4d87e70f24a165).dn: имя скачиваемого файла (пример:magnet1.gif).tr: URL трекера (пример:http://bittorrent-test-tracker.codecrafters.io/announce).
Подробнее о формате magnet-ссылок — в этой статье Википедии.
Пример magnet-ссылки
Тестирующая система запустит вашу программу следующим образом:
$ ./your_program.sh magnet_parse <magnet-link>Ожидаемый вывод:
Tracker URL: http://bittorrent-test-tracker.codecrafters.io/announce
Info Hash: d69f91e6b2ae4c542468d1073a71d4ea13879a7fПримечания
- Мы используем версию v1 формата magnet URI. Версия v2 пока не получила широкого распространения.
xt(информационный хеш) — единственный обязательный параметр; остальные необязательны.- Magnet-ссылка может содержать несколько URL трекеров, но в этом задании будет только один.
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init bittorrent ./my-bittorrent --language go2. Откройте папку в IDE
cd ./my-bittorrentРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage hw0Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.