マグネットリンクからのトレントハッシュがあります。例:fda164e7af470f83ea699a529845a9353cc26576リーチャーとピアに関する情報を取得しようとするときは、次のようにリクエストする必要があります:http ://tracker.publicbt.com/scrape?info_hash= ??? このリクエストの情報ハッシュをどのように変換する必要がありますか?それはURLエンコードですか、それともbecodingですか?どうやって?PHPの場合。
3 に答える
これは生の16進表現です。で使用pack()
しH
て変換します。次に、URLエンコードします。
誰かが問題を抱えていて、将来このスレッドに遭遇した場合:この問題全体の秘訣は、 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で追加されました。PHP5を実行していない場合は、計算後にsha1ハッシュを生のバイナリに変換する必要があります。
同僚からこの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(ok)を返すための魅力のように機能しますが、トレントの詳細を取得するためには機能しません...