使用 urllib2 下载 torrent 文件

Posted

技术标签:

【中文标题】使用 urllib2 下载 torrent 文件【英文标题】:Downloading torrent file using urllib2 【发布时间】:2016-06-22 11:59:38 【问题描述】:

我正在尝试,但它给出了错误:

Traceback (most recent call last):
File "download_torrent.py", line 11, in <module>
  torr_file = urllib2.urlopen(url)
File "C:\Users\Aly Akhtar\AppData\Local\Continuum\Anaconda\lib\urllib2.py", line 154, in urlopen
  return opener.open(url, data, timeout)
File "C:\Users\Aly Akhtar\AppData\Local\Continuum\Anaconda\lib\urllib2.py", line 431, in open
  response = self._open(req, data)
File "C:\Users\Aly Akhtar\AppData\Local\Continuum\Anaconda\lib\urllib2.py", line 449, in _open
  '_open', req)
File "C:\Users\Aly Akhtar\AppData\Local\Continuum\Anaconda\lib\urllib2.py", line 409, in _call_chain
  result = func(*args)
File "C:\Users\Aly Akhtar\AppData\Local\Continuum\Anaconda\lib\urllib2.py", line 1240, in https_open
  context=self._context)
File "C:\Users\Aly Akhtar\AppData\Local\Continuum\Anaconda\lib\urllib2.py", line 1200, in do_open
  r = h.getresponse(buffering=True)
File "C:\Users\Aly Akhtar\AppData\Local\Continuum\Anaconda\lib\httplib.py", line 1132, in getresponse
  response.begin()
File "C:\Users\Aly Akhtar\AppData\Local\Continuum\Anaconda\lib\httplib.py", line 453, in begin
  version, status, reason = self._read_status()
File "C:\Users\Aly Akhtar\AppData\Local\Continuum\Anaconda\lib\httplib.py", line 417, in _read_status
  raise BadStatusLine(line)
httplib.BadStatusLine: '' 

以下是我正在尝试的代码:

url = 'https://torcache.net/torrent/7E74F1E4AEDC08A2D63BE1EDF612AC0BF17ECBBD.torrent?title=[kat.cr]batman.v.superman.dawn.of.justice.2016.720p.hdtc.1.2gb.shaanig'
torr_file = urllib2.urlopen(url)
with open("mytorrent.torrent", "w") as f:
    f.write(torr_file.read())

我已经解决了几个类似的问题,但找不到解决方案。

【问题讨论】:

【参考方案1】:

您尝试下载的网站似乎会丢弃标头中没有User-Agent 字符串的请求。我在这里找到了解决您问题的方法:https://***.com/a/9265980/1577207。

添加User-Agent 标头为我解决了这个问题:

import urllib2
url = 'https://torcache.net/torrent/7E74F1E4AEDC08A2D63BE1EDF612AC0BF17ECBBD.torrent?title=[kat.cr]batman.v.superman.dawn.of.justice.2016.720p.hdtc.1.2gb.shaanig'

opener = urllib2.build_opener()

headers = 
   'User-Agent': 'Mozilla/5.0 (Windows NT 5.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1',


opener.addheaders = headers.items()
torr_file = opener.open(url)
with open("mytorrent.torrent", "w") as f:
    f.write(torr_file.read())

【讨论】:

它确实解决了我上面提到的问题,谢谢。但是现在使用客户端打开torrent文件时会报错:torrent is not valid bencoding @AlyAkhtar 您可以尝试将'b' 选项添加到open(),如下所示:open(file, 'wb') 用于二进制文件写入。

以上是关于使用 urllib2 下载 torrent 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 python-libtorrent 从 torrent 文件中获取 torrent 下载目录

如何在 python 中使用 urllib 下载 .torrent 文件?

使用 Webclient 下载 Torrent 文件的问题

Java Jsoup 下载 torrent 文件

无法使用 monotorrent 从新创建的 torrent 下载文件

使用 ASP.NET 下载 torrent 内容