Проверьте, является ли URL торрентом в C # .NET - PullRequest
12 голосов
/ 28 апреля 2010

Какой лучший способ для меня взять URL-адрес: http://foobar.com/foo.torrent и проверить, действительно ли это торрент, а не HTML-страница или что-то еще забавное Предложения? Спасибо:)

Ответы [ 7 ]

11 голосов
/ 28 апреля 2010

Чтобы проверить тип ресурса без его загрузки, используйте запрос 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.

4 голосов
/ 28 апреля 2010

Единственный способ узнать, действительно ли это торрент-файл, - это загрузить его и проверить, является ли торрент-файл .

3 голосов
/ 28 апреля 2010

Вероятно, лучше всего загрузить и проверить его и / или проверить тип контента application/x-bittorrent.

1 голос
/ 28 апреля 2010

Я бы использовал библиотеку MonoTorrent . В частности, вы можете использовать статический метод

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

, который будет возвращать логическое значение, указывающее, указывает ли параметр url на допустимый торрент-файл.

1 голос
/ 28 апреля 2010

В дополнение к хорошему ответу, предоставленному bobince, вы также можете взглянуть на реализацию monotorrent с открытым исходным кодом c #. Они загружают весь файл .torrent и впоследствии разбирают код (см .: http://anonsvn.mono -project.com / viewvc / trunk / bitsharp / src / MonoTorrent / MonoTorrent.Common / Torrent.cs строки 611ff)

1 голос
/ 28 апреля 2010

Прочитайте спецификацию torrent-файла, затем напишите приложение C #, чтобы загрузить содержимое URL-адреса и посмотреть, соответствует ли оно правилам в спецификации.

0 голосов
/ 28 апреля 2010

Если вы хотите изучить некоторый c ++, вы можете сделать внешний вызов библиотеки libtorrent с помощью P / Invoke. Я уверен, что у нее есть способ проверить файлы.

...