ピアリストを取得するためにトラッカーに送信する正しいURLエンコードされた情報ハッシュを考え出そうとしています。
テストのために、このURLのトレントを解析してみました。
ファイルを開いた後、情報辞書の一部を手動で切り取り、SHA1-その値をハッシュします。このバイナリ値を取得します。
<< 84,124,15,255,155,171,156,168,91,46,204,24,249,116,110、139,202,167,163,54 >>
後者のバイナリ値から取得されるASCII文字列は788f590f28a799cc1009a9b780b649fd6f0a2e91であり、サイトに記載されている値と同じです。
それで、今まですべてが正しいと仮定しましょう(そうではありませんか?)。
以下のurl-encoding関数を使用してバイナリ値をエンコードした後、T%7c%0f%ff%9b%ab%9c%a8%5b。%cc%18%f9tn%8b%ca%a7%a36が得られます。トラッカーに送信する必要がある正しいurlencoded値にさえ近いです。(これをトラッカーに送信すると、見つからないエラーメッセージが表示されます。さらに、wiresharkを使用して表示される値x%8fY%0f%28%a7%99%cc%10%09%a9と一致しません。 %b7%80%b6I%fdo%0a。%91)。
私が使用しているURLエンコード関数:
encode(<<Bin:20/binary-unit:8>>)->
%io:format("~p~n", [binary_to_list(Bin)]),
encode(binary_to_list(Bin));
encode(List) -> do_encode(List).
do_encode([])-> [];
do_encode([H|T]) when H>=$a, H=<$z ->
[H| encode(T)];
do_encode([H|T]) when H>=$A, H=<$Z ->
[H| encode(T)];
do_encode([H|T]) when H>=$0, H=<$9 ->
[H| encode(T)];
do_encode([H|T]) when H==$- ->
[H| encode(T)];
do_encode([H|T]) when H==$. ->
[H|do_encode(T)];
do_encode([H|T]) when H==$* ->
[H|do_encode(T)];
do_encode([H|T]) ->
to_hex(H) ++ encode(T).
hex(N) when N < 10 ->
$0+N;
hex(N) when N >= 10, N < 16 ->
$a+(N-10).
to_hex(N) when N < 256 ->
[$%, hex(N div 16), hex(N rem 16)].
上記の機能は間違っていますか?生データの処理に関しては、私は一種の初心者です。だからヘルプ/アイデアは大歓迎です!ありがとう!