比特流追踪器请求,info_hash的格式。

11
当我想向追踪器发送初始请求时,所有我遇到的参考资料都说它需要进行 URL 编码。如果我将所拥有的信息密钥的 SHA-1 哈希值转换为十六进制字符串,为什么我还需要对哈希值进行 URL 编码呢?因为它只包含被允许的字符。
2个回答

7

info_hash参数不是十六进制字符串,而是纯二进制字符串,因此您需要对其中的许多字节进行URL编码。(这往往会使最终长度比仅使用十六进制编码的字符串更长,但这就是BitTorrent协议,现在已经太晚了,无法改变!)


因此,值为 32 的字节应编码为 %20 而不是 +,是吗? - lud
纯二进制,即0和1?这不是上面显示的内容。infohash字符串所需的实际编码是什么? - dessalines
二进制是一系列字节的表示。您需要对字节序列进行URL编码,以将其放入查询参数中,因此您会得到info_hash=ABC%20...而不是最初建议的info_hash=41424320 - bobince
@lud:这并没有很好地说明——BEP0003只是假设每个人都知道GET请求的样子,而没有指定确切的编码标准。你当然希望%20+都能被支持,因为这种行为可以追溯到HTML2/RFC1866,那里是表单编码格式的起源。就我个人而言,我还没有调查过跟踪器实际上支持什么,但倾向于选择%20以保险起见。 - bobince

0

信息哈希的二进制形式(一个20字节长的SHA1哈希值)应该进行URL编码。据我所知,一些跟踪器接受纯十六进制的信息哈希(40个字符长的字符串)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接