Что является лучшим способом для меня взять URL как: http://foobar.com/foo.torrent и проверка, если это действительно - поток, не страница HTML или что-то еще забавное. Предложения? Спасибо :)
Если вы хотите немного изучить C ++, вы можете сделать внешний вызов библиотеки libtorrent с помощью P / Invoke. Я уверен, что у него есть способ проверки файлов.
В дополнение к хорошему ответу, предоставленному bobince, вы также можете взглянуть на реализацию C # с открытым исходным кодом monotorrent . Они загружают весь .torrent-файл и после этого разбирают Bencode (см .: http://anonsvn.mono-project.com/viewvc/trunk/bitsharp/src/MonoTorrent/MonoTorrent.Common/Torrent.cs ] строки 611ff)
Единственный способ узнать, действительно ли это торрент-файл, - это загрузить его и проверить, является ли это торрент-файлом .
Вероятно, лучше всего загрузить и проверить его и / или проверить тип содержимого application / x-bittorrent
.
Прочтите спецификацию торрент-файла, затем напишите приложение C #, чтобы загрузить содержимое URL-адреса и посмотреть, соответствует ли оно правилам, указанным в спецификации.
Чтобы проверить тип ресурса, не загружая его, используйте запрос 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». Вот библиотека .NET, которая утверждает, что ее обрабатывает. Вы можете догадаться, что любой файл, который является допустимым bencode, является торрент-файлом, но если вы хотите убедиться, что вы можете посмотреть сопоставление, которое он декодирует, и проверить свойства info
и announce
.
Я бы использовал библиотеку MonoTorrent. В частности, вы могли бы использовать статический метод
Torrent.TryLoad(Uri url, string location, out Torrent torrent)
который вернет булево значение, указывающее, указывает ли параметр url
на действительный торрент-файл.