Не могу скачать торрент с публичного трекера libtorrent

Я использую модуль libtorrent в python для загрузки торрента. Я могу скачать торрент с частного трекера, но не с публичного. Я пробовал использовать различные торренты, которые я могу скачать с помощью «трансмиссии». Проверил на 4-х разных соединениях, все одинаково.

def downloadTorrent(torrent):
    """
    Download torrent using libtorrent library.
    Torrent will be stored at the current directory.
    """
    ses = lt.session()
    ses.listen_on(6881, 6891)

    info = lt.torrent_info(torrent)
    h = ses.add_torrent({'ti': info, 'save_path': './'})
    ses.start_dht()
    print 'starting', h.name()

    while (not h.is_seed()):
        s = h.status()

        state_str = ['queued', 'checking', 'downloading metadata', \
          'downloading', 'finished', 'seeding', 'allocating', 'checking fastresume']
        print '\r%.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d) %s' % \
          (s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, \
          s.num_peers, state_str[s.state]),
        sys.stdout.flush()

        time.sleep(1)

    print h.name(), 'complete'

Когда я пытаюсь, я получаю:

0.00% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 0) downloading 

И это остановить там.

Я не знаю, поможет ли это, но приватный трекер использует http, а не udp, и не разрешает DHT.


person Chaker    schedule 23.06.2015    source источник
comment
Что происходит, когда вы пытаетесь? Вы получаете ошибку, которую вы могли бы включить в свой вопрос?   -  person khagler    schedule 23.06.2015
comment
Он не подключается ни к каким сверстникам.   -  person Chaker    schedule 23.06.2015
comment
Трекер(ы) действительно работает?! Попробуйте трекеры, которые вы можете найти здесь: coppersurfer.tk Многие из старых общедоступных трекеров не работают. более.   -  person Encombe    schedule 23.06.2015
comment
Я могу скачать этот же торрент-файл с помощью transmission, так что трекеры работают.   -  person Chaker    schedule 23.06.2015
comment
Это не доказывает, что трекер работает.   -  person Encombe    schedule 24.06.2015
comment
возможно, вам нужно загрузить DHT. Это невозможно узнать, если вы не распечатаете оповещения, созданные libtorrent, и не просмотрите их, чтобы выяснить, какие из них могут быть актуальными. если вы не можете понять это, обновите свой вопрос, указав дополнительную информацию.   -  person Arvid    schedule 24.06.2015
comment
@Arvid Проблема в том, что я не получаю никаких предупреждений от libtorrent. Он останавливается только на 0% без сверстников.   -  person Chaker    schedule 24.06.2015
comment
опубликованный вами код не запрашивает предупреждения libtorrent. Вы уверены, что просто не просите их? Если вы спросите и получите буквально 0 предупреждений, убедитесь, что вы установили все биты в маске предупреждения в файле session_settings.   -  person Arvid    schedule 24.06.2015
comment
Можете ли вы сказать нам, какой публичный торрент-адрес вы пытаетесь использовать?   -  person Ben    schedule 19.09.2015
comment
@ Бен, это не работает ни с одним трекером. Например, вот этот торрент chaker.tn/big_buck_bunny.torrent, который я тестировал с помощью rtorrent, и он работает. в совершенстве.   -  person Chaker    schedule 19.09.2015


Ответы (1)


Вы действительно не объясняете, как вы предоставляете торрент-файл в своей функции downloadTorrent. Ваша функция работает, если вы уже скачали торрент-файл на свой компьютер.

Если вы хотите указать URL-адрес торрента в качестве аргумента для этой функции, вам нужно прочитать ответ http в виде байтов, подобных этому torrent = lt.bdecode(urllib2.urlopen(torrent_url, 'rb').read())

Вот полный код, который работает с python 2.7:

import libtorrent as lt
import urllib2

public_torrent = 'http://releases.ubuntu.com/14.04.3/ubuntu-14.04.3-desktop-amd64.iso.torrent'

def downloadTorrent(torrent_url):
    """
    Download torrent using libtorrent library.
    Torrent will be stored at the current directory.
    """
    ses = lt.session()
    ses.listen_on(6881, 6891)

    # read torrent file as bytes
    torrent = lt.bdecode(urllib2.urlopen(torrent_url, 'rb').read())

    info = lt.torrent_info(torrent)
    h = ses.add_torrent({'ti': info, 'save_path': './'})
    ses.start_dht()
    print 'starting', h.name()

    while (not h.is_seed()):
        s = h.status()

        state_str = ['queued', 'checking', 'downloading metadata', \
          'downloading', 'finished', 'seeding', 'allocating', 'checking fastresume']
        print '\r%.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d) %s' % \
          (s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, \
          s.num_peers, state_str[s.state]),
        sys.stdout.flush()

        time.sleep(1)

    print h.name(), 'complete'

downloadTorrent(public_torrent)
person Ben    schedule 19.09.2015