Борьба за связь с веб-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 в заголовке.
Чтобы сломать это:
- Вызовите token.html с учетными данными uTorrent.
- В содержании ответа проанализируйте HTML, чтобы получить токен.
в заголовке ответа есть значение с ключом
Set-Cookie
, который выглядит какSet-Cookie: GUID=<guid value>
Мне нужно было использовать это значение (
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
в этом случае.