2010-04-28 28 views
12

什麼是最好的方式讓我採取像這樣的網址:http://foobar.com/foo.torrent並檢查是否真的是一個洪流,而不是一個HTML頁面或其他有趣的東西。 建議? 謝謝:)檢查URL是否是C#.NET中的洪流

+6

爲什麼所有的反對票?我認爲這是一個相關的問題。 – 2010-04-28 18:25:55

+1

我想有些人看到'洪流'一詞,立即去「盜版是不好的」,並downvote。 – bobince 2010-04-28 18:41:06

回答

1

閱讀torrent文件規範,然後編寫一個C#應用程序來下載URL的內容,看它是否符合規範中的規則。

3

可能最好是下載並驗證它和/或檢查內容類型是application/x-bittorrent

+3

請注意,許多Web服務器不提供具有正確內容類型的文件。因此,如果Web服務器返回內容類型的「application/octet-stream」,那麼文件仍然是一個torrent文件仍然不是不可能的。 – dtb 2010-04-28 18:27:11

4

要知道它是否真的是torrent文件的唯一方法是下載它並檢查它是否是torrent file

0

如果您願意學習一些C++,您可以使用P/Invoke對libtorrent庫進行外部調用我很確定它有一種驗證文件的方法。

11

要檢查資源的類型,而無需下載,使用HEAD請求:

WebRequest request= WebRequest.Create("http://foobar.com/foo.torrent"); 
request.Method= "HEAD"; 
WebResponse response= request.GetResponse(); 
if (response.Headers.Get("Content-Type")=="application/x-bittorrent") { 
    ... 

然而,類型application/x-bittorrent可能無法在某些服務器設置,所以這是可能的,你可能會得到application/octet-stream相反,如果你不走運,甚至可以使用text/plain。如果您需要解釋這一點,那麼您所能做的只是使用正常的GET請求來獲取文件,然後查看是否可以對其進行解碼。

BitTorrent文件格式基於一種名爲'bencode'的格式。 Here's聲明處理它的.NET庫。您可以猜測任何有效的文件bencode是torrent文件,但是如果您想確保可以查看它解碼的映射並檢查infoannounce屬性。

+2

不錯的發現和很好的解釋! +1 – tobsen 2010-04-28 18:43:57

1

我會使用MonoTorrent庫。具體來說,你可以使用靜態方法

Torrent.TryLoad(Uri url, string location, out Torrent torrent) 

將返回指示是否url參數指向一個有效的torrent文件boolean值。