2012-07-18 79 views
0

我正在写一个Bittorrent客户端。涉及的步骤之一要求程序向包含部分torrent文件的SHA1散列的跟踪器发送HTTP GET请求。我已经使用Fiddler2拦截Azureus发送给跟踪器的请求。网址编码字节字符串?

Azureus发送的散列是URL编码的,如下所示:%D9%0C%3C%E3%94%18%F0%C5%D9%83X%E03I%26%2B%60%8C%BFR

哈希应该像这样它的URL编码前:d90c3ce39418f0c5d98358e03349262b608cbf52

我发现它并不像把一个“%”符号每两个字符那么简单,所以我将如何去编码该字节串与Azureus一样。

在此先感谢。

回答

1

从左到右浏览字符串。如果遇到%,请输出接下来的两个字符,将大写字母转换为小写字母。如果遇到其他问题,请使用小写字母输出十六进制格式的ASCII码。

%D9 %0C %3C %E3 %94 %18 %F0 %C5 %D9 %83 X %E0 3 I %26 %2B %60 %8C %BF R 

X的ASCII码是0x58,所以变成58。 3的ASCII码是0x33。

(我有点不解,为什么你不得不问,虽然你的问题清楚地表明,你认识到这是URL编码)。

+0

我认为这个问题是关于编码,解码不是。 – 2012-07-18 08:44:57

+0

没有区别。这个过程显然是可逆的。 (**问题**指出它只是URL编码!) – 2012-07-18 08:45:17

+0

我没有意识到可以使用ascii字符来表示字节,感谢您清除它! :) – brnby 2012-07-18 09:06:49

2

其实,你可以每两个字符放一个%符号。 Azureus不这样做,因为,例如,R是一个URL中的安全字符,而52R的十六进制表示,因此它不需要对其进行百分比编码。改为使用%52是等同的。