首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我无法从公共跟踪器libtorrent下载torrent

我无法从公共跟踪器libtorrent下载torrent
EN

Stack Overflow用户
提问于 2015-06-24 00:36:42
回答 1查看 1.4K关注 0票数 18

我正在使用python中的libtorrent模块下载torrent。我可以从私人追踪器下载torrent,但不能从公共追踪器下载。我试着使用各种torrents,我可以使用“传输”来下载。我对比了4个不同的连接,都是一样的。

代码语言:javascript
复制
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'

当我尝试的时候,我得到:

代码语言:javascript
复制
0.00% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 0) downloading 

它就到此为止了。

我不知道它是否有帮助,但私人追踪器使用的是http而不是udp,而且它不允许分布式哈希表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-19 22:28:30

您并没有真正解释如何在downloadTorrent函数中提供torrent文件。如果您已经在计算机上下载了torrent文件,则您的函数将起作用。

如果您想要提供torrent url作为此函数的参数,则需要将http响应作为字节读取,如下所示的torrent = lt.bdecode(urllib2.urlopen(torrent_url, 'rb').read())

以下是适用于python 2.7的完整代码:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31008525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档