3

我有来自磁铁链接的洪流哈希。例如:fda164e7af470f83ea699a529845a9353cc26576 当我尝试获取有关 leechers 和 peers 的信息时,我应该请求:http ://tracker.publicbt.com/scrape?info_hash= ??? 我应该如何为此请求转换信息哈希?是url编码还是becoding?如何?在 PHP 中。

4

3 回答 3

3

这是一个原始的十六进制表示。使用pack()withH进行转换。然后对其进行 URL 编码。

于 2010-07-17T15:55:24.893 回答
1

从同事那里得到了这个 python 片段,

r = ''
s = 'fda164e7af470f83ea699a529845a9353cc26576'
for n in range(0, len(s), 2):
    r += '%%%s' % s[n:n+2].upper()
print r

输出:%FD%A1%64%E7%AF%47%0F%83%EA%69%9A%52%98%45%A9%35%3C%C2%65%76

奇迹般有效。

编辑:就像让跟踪器返回状态 200(好的)的魅力,但仍然不能用于检索种子详细信息......

于 2010-08-31T14:42:44.107 回答
1

万一有人遇到麻烦并在将来遇到此线程:整个问题的诀窍是使用PHP: sha1bool $raw_output函数的参数,将其设置为“true”。

BDecode/DEncode 类可以在这里找到。这个名为 Trackon 的项目还包括许多其他有用的类,用于与种子跟踪器和文件进行交互。

因此,在 PHP 中,类似这样的东西将用于获取正确的信息哈希,以便从跟踪器中获取详细信息:

include('./path/to/BDecode.php');
include('./path/to/BEncode.php');

function getHash($torFile){
    $tfile = BDecode(file_get_contents($torFile));
    $infohash = sha1(BEncode($tfile["info"]), TRUE);

    return urlencode($infohash);
}

然后就这样称呼它:

$hash = getHash('./path/to/.torrent');

希望这可以帮助那里的人。在阅读了许多有关如何获取正确信息哈希的帖子后,我仍然摸不着头脑。我明白为什么现在任何地方都没有提到这个,这个参数是在 PHP 5 中添加的。如果你没有运行 PHP 5,你必须在计算后将 sha1 哈希转换为原始二进制文件。

于 2011-10-29T06:57:29.443 回答