Борьба за связь с веб-API Utorrent

Я пытаюсь получить доступ к Utorrents Web API, он использует систему аутентификации токена, которая подробно описана здесь

JavaScript на моей странице

        <script>
            $.getJSON("http://XXX.XXX.XXX.XXX/lib/token.php", function(response) {
                var head = document.getElementsByTagName('head')[0];
                var script = document.createElement('script');
                script.type = 'text/javascript';
                //script.onreadystatechange = function () {
                //    if (this.readyState == 'complete') utorrent();
                //}
                //script.onload = utorrent();
                script.src = 'http://XXX.XXX.XXX.XXX:8080/gui/?list=1&token=' + response.token;
                head.appendChild(script);
            });
        </script>

просто извлекая токен из php-файла и передавая его по цепочке, я подтвердил, что токен передается и не отравлен, мой PHP-документ приведен ниже

<?php
header('Content-type: text/json');
$token = file_get_contents('http://[username]:[password]@XXX.XXX.XXX.XXX:8080/gui/token.html');
$token = str_replace("<html><div id='token' style='display:none;'>", "", $token);
$token = str_replace("</div></html>", "", $token);
$response = array('token' => $token);
echo json_encode($response);
?>

это дает мне подтверждение токена Object {token: "GMt3ryaJE64YpXGN75-RhSJg-4gOW8n8XfTGYk_ajpjNLNLisR3NSc8tn1EAAAAA"}

но затем я получаю код ошибки 400 при получении списка GET http://xxx.xxx.xxx.xxx:8080/gui/?list=1&token=GMt3ryaJE64YpXGN75-RhSJg-4gOW8n8XfTGYk_ajpjNLNLisR3NSc8tn1EAAAAA (400)

Любая помощь / мысли / идеи будут с благодарностью

4 ответа

Просто добавив мои 2 цента.

Я делал аналогичную реализацию в.NET MVC - я смог получить токен, как и вы, но функция list=1 у меня тоже не сработала, получив код 400 неверных запросов (как вы уже нашли),

Решение для меня: в ответе token.html есть токен в div и также GUID в заголовке.

Чтобы сломать это:

  1. Вызовите token.html с учетными данными uTorrent.
  2. В содержании ответа проанализируйте HTML, чтобы получить токен.
  3. в заголовке ответа есть значение с ключом Set-Cookie, который выглядит как

    Set-Cookie: GUID=<guid value>

  4. Мне нужно было использовать это значение (GUID=<guid value>) во всех отправляемых запросах, а также токене и все заработало!

Я не уверен, что реализация в PHP, чтобы сделать это, однако:)

Также быстрое примечание, я пытался получить значения через jQuery's $.getJSON а также $.Ajax метод безуспешен, потому что используемый мной браузер (chrome) имеет строгие правила для междоменных запросов, и похоже, что uTorrent реализует его JSONP,

Надеюсь это поможет!

Вы пытались изменить порядок параметров запроса?

например: http://localhost:8080/gui/?token=<token_uuid>&list=1

Ссылка: https://github.com/bittorrent/webui/wiki/TokenSystem


ОБНОВЛЕНИЕ Я столкнулся с аналогичной проблемой, пытаясь создать и XMPPBot для клиента Utorrent в Python.

@mtbennett был прав. Вам также необходимо сохранить информацию о сеансе.

Когда вы получите ответ от token.html, также сохраните информацию о cookie. Обычно есть 2 параметра: GUID и сессии. Вам нужно поместить их в заголовок для всех ваших последующих запросов - List API, Getfiles API и т. Д.

Это должно исправить вашу проблему!

Сообщение об ошибке 400 означает, что вы связываетесь с неверным запросом. Тип носителя MIME для текста JSON - это application/json .

Использование text/plain или же application/jsonне text/json,

application/json иногда вызывает проблемы в Chrome, так что вы можете придерживаться text/plain в этом случае.

Другие вопросы по тегам