【发布时间】:2012-11-28 01:46:38
【问题描述】:
我正在尝试连接到一个 torrent 跟踪器以接收一个可以与之一起玩比特 torrent 的对等方列表,但是我在形成正确的 GET 请求时遇到了麻烦。
据我了解,我必须从 .torrent 文件中获取经过编码的“信息”部分的 20 字节 SHA1 哈希。我使用以下代码:
h = hashlib.new('sha1')
h.update(bencode.bencode(meta_dict['info']))
info_hash = h.digest()
这就是我卡住的地方。我不知道如何创建正确的 url 编码 info_hash 以作为参数粘贴到 URL 字符串中。
我相信它涉及 urllib.urlencode 和 urllib.quote 的某种组合,但是我的尝试到目前为止还没有奏效。
【问题讨论】:
-
urllib.quote() 应该是你所需要的...
-
在极少数情况下,种子有一个信息字典,其键未按字典顺序排序,或包含重复键。在这种情况下,您对它的重新编码很可能会产生与 .torrent 文件中的字节序列不同的字节序列,并且还会产生错误的哈希值。为了解决这个问题,请改为散列 .torrent 文件中与 info dict 相对应的原始范围。
标签: python http urlencode bittorrent tracker