我想要拿出正確的url編碼信息哈希發送給跟蹤器,以獲得對等列表。解析torrent文件 - 散列信息。 (Erlang)
爲了測試,我試着解析了在this 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編碼功能下面我得到編碼的二進制值後 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)].
是上述錯誤的功能是什麼?當談到原始數據處理時,我是一個新手。所以幫助/想法非常感謝!謝謝!
我試過使用escape_uri(),它給出了一個「uTorrent」發送給跟蹤器的不同結果,所以我試着實現我自己的目的,看看我能否得到正確的值。如果這是給定二進制的正確編碼,那麼如何將值發送到跟蹤器是不同的? – Smokie 2010-11-08 16:04:37