python - 实现 BitTorrent 客户端,我从跟踪器收到 403

标签 python bittorrent

我正在尝试用 python 实现一个 BitTorrent 客户端(我知道有一些库可以轻松地为我做到这一点,但我只是想学习新东西)。

我下载并成功解码了 torrent 文件,但是当我尝试在跟踪器上执行 GET 请求时,我收到了 403 响应,我不知道为什么。这是我尝试过的(这是从 python shell 复制的代码):

>>> f = open("torrents/test.torrent")
>>> torrentData = bencoder.decode(f.read())
>>> torrentData["announce"]
'http://reactor.flro.org:8080/announce.php?passkey=d59fc5b5b9e2664895ad1c68a3621caf'
>>> params["info_hash"] = sha1(bencoder.encode(torrentData["info"])).digest()
>>> params["peer_id"] = '-AZ-1234-12345678901'
>>> params["left"] = sum(f["length"] for f in torrentData["info"]["files"])
>>> params["port"] = 6890
>>> params["uploaded"] = 0
>>> params["downloaded"] = 0
>>> params["compact"] = 1
>>> params["event"] = "started"
>>> params
{'uploaded': 0, 'compact': 1, 'info_hash': '\xab}\x19\x0e\xac"\x9d\xcf\xe5g\xd4R\xae\xee\x1e\xd7\
>>> final_url = torrentData["announce"] + "&" + urllib.urlencode(params)
>>> final_url
'http://reactor.flro.org:8080/announce.php?passkey=d59fc5b5b9e2664895ad1c68a3621caf&uploaded=0&co
>>> urllib2.urlopen(final_url)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/
    return opener.open(url, data, timeout)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/
    response = meth(req, response)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/
    'http', request, response, code, msg, hdrs)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/
    return self._call_chain(*args)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/
    result = func(*args)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden

我是否缺少 params 文件夹中的某些内容?我还在我的 uTorrent 客户端中尝试了这个 torrent,它工作正常,因此跟踪器工作正常。我什至尝试了裸公告网址(没有参数)和同样的事情。从我从 BitTorrent 规范中读到的内容来看,没有提到来自跟踪器的 403 响应。

如果你们能帮助我解决这个问题,我会非常高兴。

最佳答案

为了减少变量数量,最好针对您在本地运行的跟踪器进行测试,例如opentracker是一个不错的选择,因为它提出的要求很少。

仅在特定跟踪器上出现错误,而在其他跟踪器上不会出现错误,这可能是由于跟踪器管理员施加的额外要求而不是 BitTorrent 协议(protocol)本身造成的。

主要的异常(exception)是许多公共(public)跟踪器可能不允许非紧凑公告或需要 UDP 公告而不是 HTTP 公告。

关于python - 实现 BitTorrent 客户端,我从跟踪器收到 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33286465/

相关文章:

python - 如何使用带输入的函数?

bittorrent - 如何在 uTorrent 中准确计算 torrent 的可用性

c - 为什么Tracker服务器发送 "\x03\0\0\0r.opConnection ID missmatch."作为响应消息? (比特流协议(protocol))

python - 随后运行多个 tensorflow session

python - python 上的正则表达式仅选取一位数字

c# - 无法使用 monotorrent ("no connection could be made because the target machine actively refused it"下载种子文件)

microcontroller - Torrent 客户端可以使用 4KB 的 RAM 运行吗?

go - 为什么所有的BitTorrent跟踪器都给我相同的响应?

python - keras 层 Masking() 和 Embedding(mask_zero =True) 之间有区别吗?

python - 如何使用 Python 将 Tick by Tick 数据转换为 OHLC 烛台数据?