苦苦挣扎与utorrent web API沟通

时间:2013-05-24 09:10:45

标签: javascript php utorrent

我正在尝试访问utorrents web api,它使用详细的here

令牌身份验证系统

我页面上的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);
?>

这给了我一个令牌的确认 对象{token:“GMt3ryaJE64YpXGN75-RhSJg-4gOW8n8XfTGYk_ajpjNLNLisR3NSc8tn1EAAAAA”}

但是我在检索列表时收到400错误代码 获取http://XXX.XXX.XXX.XXX:8080/gui/?list=1&token=GMt3ryaJE64YpXGN75-RhSJg-4gOW8n8XfTGYk_ajpjNLNLisR3NSc8tn1EAAAAA 400(错误)

非常感谢任何帮助/想法/想法

4 个答案:

答案 0 :(得分:1)

只需加2美分。

我一直在.NET MVC中执行类似的实现 - 我能够像你一样获得令牌,但是list = 1功能对我来说也不起作用,得到了400个错误的请求代码(就像你一样)已经找到了。)

我的解决方案: 在token.html响应中,div中有一个标记,标题中还有一个GUID

要打破它:

  1. 使用uTorrent凭据调用token.html
  2. 在响应内容中,解析html以获取令牌
  3. 在响应标头中,有一个键为Set-Cookie的值,看起来像

    Set-Cookie: GUID=<guid value>

  4. 我需要在发回的所有请求中使用此值(GUID=<guid value>),以及令牌并且它有效!

  5. 我不确定PHP中的实现是做什么的,但是:)

    另外请注意,我一直试图通过jQuery的$.getJSON$.Ajax方法获取值,但没有任何成功,因为我使用的浏览器(chrome)对跨域请求有严格的指导,它看起来并不像uTorrent正在实施JSONP

    希望这有帮助!

答案 1 :(得分:0)

使用text/plainapplication/json,而不是text/json

application/json有时会导致Chrome出现问题,因此在这种情况下您可能希望坚持使用text/plain

答案 2 :(得分:0)

400错误消息表示您正在与错误请求进行通信。 JSON文本的MIME媒体类型是application / json。

答案 3 :(得分:0)

您是否尝试更改查询参数的顺序?

例如:http://localhost:8080/gui/?token=<token_uuid>&list=1

参考:https://github.com/bittorrent/webui/wiki/TokenSystem#examples


<强>更新 我遇到了类似的问题,试图在python中为utorrent客户端创建和XMPPBot。

@ m.t.bennett是对的。您还需要保存会话信息。

当您收到来自 token.html 的回复时,也会捕获Cookie信息。 通常有2个参数: GUID 会话。您需要将它们放在标题中以用于所有后续请求 - List API,Getfiles API等。

这应该可以解决您的问题!