实现一个bittorent客户端,我从

2024-09-30 04:31:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python实现bittorrent客户机(我知道有lib可以很容易地为我实现这一点,但我只是在尝试学习新东西)。在

我下载并成功地解码了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文件夹中丢失了什么吗?我也尝试了这个torrent在我的客户机和它的工作,所以追踪器工作得很好。我甚至尝试了裸公告网址(没有参数)和同样的事情。从我从bittorrent规范中读到的内容中,没有提到来自跟踪器的403响应。在

如果你们能帮我解决这个问题我会很高兴的。在


Tags: infohttpurllibusrlocalframeworkparams
2条回答

为了减少变量的数量,最好在本地运行的跟踪器上进行测试,例如,opentracker是一个很好的选择,因为它几乎没有要求。在

你只在特定的跟踪器上而不是在其他跟踪器上出现的错误很可能是由于跟踪器管理员强加的附加要求而不是由bittorrent协议本身造成的。在

主要的例外是,许多公共跟踪器可能不允许非紧凑的通告或要求UDP通告而不是HTTP通告。在

好吧,我设法解决了这个问题。这有点傻,但实际上是因为对跟踪器的请求没有任何报头,而跟踪器实际上需要一个用户代理,否则它会拒绝请求。我所要做的就是在请求中添加一个用户代理。在

相关问题 更多 >

    热门问题