Использование uTorrent Web API через .NET - PullRequest
4 голосов
/ 15 августа 2011

Я пытаюсь получить список торрентов из uTorrent, используя Web API . Получение требуемого токена идет O.K.:

WebClient client = new WebClient() { Credentials = new NetworkCredential(UserName, pass) };
StreamReader Reader = new StreamReader(client.OpenRead("http://localhost:" + port + "/gui/token.html"));
string token = Reader.ReadToEnd();
token = token.Split('>')[2].Split('<')[0]; 
// token is now something like 3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA

Но когда я пытаюсь использовать его для получения списка торрентов:

Reader = new StreamReader(client.OpenRead("http://localhost:" + port + "/gui/?list=1&token=" + token));

все, что я получаю, это "Ошибка 400 Неправильный запрос".

Я пытался получить токен вручную. В браузере страница "http://localhost:30303/gui/?list=1&token=3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA" открывается как надо, но в C # с той же ссылкой без каких-либо переменных я все равно получаю ошибку 400. Интересная часть заключается в том, что если отключить аутентификацию токена, WebClient загрузит страницу идеально с * 1012 и без *

"&token=3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA"

но авторизация токена включена по умолчанию, поэтому my и любое приложение должно его использовать. И да, WebRequest / HttpWebRequest также не помогли.

P.S. извините за мой английский, я так и не смог заставить его работать правильно

Ответы [ 3 ]

7 голосов
/ 17 августа 2011

Вы должны сохранить куки из запроса

Classes.CookieAwareWebClient client = new Classes.CookieAwareWebClient() { Credentials = new NetworkCredential("shehab", "shehab") };
StreamReader Reader = new StreamReader(client.OpenRead("http://localhost:" + "8080" + "/gui/token.html"));
string token = HtmlRemoval.StripTagsRegexCompiled(Reader.ReadToEnd());
MessageBox.Show(token);

Reader = new StreamReader(client.OpenRead("http://localhost:" + "8080" + "/gui/?list=1&token=" + token));
MessageBox.Show(Reader.ReadToEnd());

и для класса, поддерживающего файлы cookie, перейдите по следующей ссылке ( Использование CookieContainer с классом WebClient ), поскольку веб-клиент не поддерживает файлы cookie.

1 голос
/ 16 августа 2011

Вы должны сохранить куки из запроса

WebRequest request = WebRequest.Create("http://localhost:" + port + "/gui/token.html");
CookieContainer cookies = new CookieContainer();
(request as HttpWebRequest).CookieContainer = cookies;

, а затем использовать его в каждом другом запросе к uTorrent при использовании того же токена:

request = WebRequest.Create("http://localhost:" + port + "/gui/?list=1&token=" + token);
(request as HttpWebRequest).CookieContainer = cookies;
0 голосов
/ 15 августа 2011

У меня есть простое трехэтапное предложение:

  1. Когда вы используете браузер с токеном, используйте Fiddler2 для анализа HTTP-трафика между сервером и браузером.

  2. Откройте приложение C # и используйте Fiddler2 для анализа HTTP-трафика между сервером и вашим приложением.

  3. Сравните HTTP-запросы и ответы для браузера с запросами и ответами для приложения C #. Если вы видите существенную разницу, есть большая вероятность, что это может быть проблемой.

...