2009-11-05 162 views
7

我已閱讀Bit-torrent規範並完成了大量搜索,試圖找出如何從torrent跟蹤器獲取種子/同伴/下載的數據(使用Python )。我可以從Torrent中計算出信息散列沒有問題,它與各種正在使用的洪流應用程序給出的信息散列相匹配。如何計算torrent的抓取URL

然而,當我試圖從我要麼超時(跟蹤工作)跟蹤的信息或獲得空數據,這取決於什麼樣的形式,我把網址:

http://tracker.openbittorrent.com/scrape?info_hash=a8c482902b1c735de462479721b011dc7b3d3558 - 超時

我被告知這應該是20個字符長,所以需要一個子字符串,但這會給出空的數據。

http://tracker.openbittorrent.com/scrape?info_hash=a8c482902b1c735de462 - D5:filesdee

我想我誤解了與我應該如何編碼,或對刮URL的信息散列東西,但不能爲我的生命看到。

回答

6

您正在傳遞info_hash的十六進制字符表示形式。它應該是一個二進制表示。爲了讓不能打印的字節到URL編碼的URL使用:

/scrape?info_hash=%A8%C4%82%90%2B%1Cs%5D%E4bG%97%21%B0%11%DC%7B%3D5X 

(我也想盡量避免在info_hash參數編碼_ ...不,這是不正確的,但它的排序事情我會期待一些書面換速跟蹤弄亂)

+1

在Python 3中,使用urllib.parse.quote(infohash)。在Python 2中,使用urllib.quote(infohash)。 – Mead 2011-11-11 08:01:30

+1

如果您只有infohash的十六進制版本,請使用'binascii.a2b_hex(hexinfohash)'將其轉換回二進制。如果你使用Python 3,你可能需要調用'binascii.a2b_hex(hexinfohash.encode(「utf-8」))'。 – Mead 2011-11-11 08:07:26

3

我的解決辦法:

import binascii 

binary_info_hash = binascii.unhexlify('79b193385de5b967175ca86073670fce0e45a324') 
print binary_info_hash 

結果:

y%B1%938%5D%E5%B9g%17%5C%A8%60sg%0F%CE%0EE%A3%24 

更多信息:binascii.unhexlify