Как преобразовать хэш-информация о торрентах для очистки?

У меня есть хэш-торрент с магнитной ссылки. Например: fda164e7af470f83ea699a529845a9353cc26576 Когда я пытаюсь получить информацию о leechers и сверстниках, я должен запросить: http://tracker.publicbt.com/scrape?info_hash= ??? Как мне преобразовать хэш информации для этого запроса? Является ли он кодировкой или кодированием url? как? В PHP.

Related of "Как преобразовать хэш-информация о торрентах для очистки?"

Это необработанное шестнадцатеричное представление. Используйте pack() с H чтобы преобразовать его. Затем URL-адрес кодирует его.

Получил этот фрагмент питона от коллеги,

 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 (ok), но все еще не работает для получения сведений о торренте …

В случае, если у кого-то возникнут проблемы и наткнутся на этот поток в будущем: трюк для всей этой проблемы состоит в том, чтобы использовать аргумент bool $raw_output функции PHP: sha1 , установив его в «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); } в 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); } в 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 в исходный двоичный файл после его вычисления.