我无法从 public tracker libtorrent 下载 torrent
I can't download torrent from public tracker libtorrent
我正在使用 python 中的 libtorrent
模块来下载 torrent。我可以从私人追踪器下载种子文件,但不能从 public 追踪器下载。我尝试使用各种种子,我可以使用 "transmission" 下载。我检查了 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。
您并没有真正解释如何在 downloadTorrent
函数中提供 torrent 文件。如果您已经在计算机上下载了 torrent 文件,您的功能就可以使用。
如果你想提供一个 torrent 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)
我正在使用 python 中的 libtorrent
模块来下载 torrent。我可以从私人追踪器下载种子文件,但不能从 public 追踪器下载。我尝试使用各种种子,我可以使用 "transmission" 下载。我检查了 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。
您并没有真正解释如何在 downloadTorrent
函数中提供 torrent 文件。如果您已经在计算机上下载了 torrent 文件,您的功能就可以使用。
如果你想提供一个 torrent 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)