难以与当前的web API进行通信



我正在尝试访问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);
?>

给我一个令牌的确认对象{token: " gmt3ryaje64ypxgn75 - rhsjj - 4gow8n8xftgyk_ajpjnlnlisr3nsc8tn1eaaaaa "}

,但是当检索列表时,我收到一个400错误代码GET http://XXX.XXX.XXX.XXX:8080/gui/?list=1&token=GMt3ryaJE64YpXGN75-RhSJg-4gOW8n8XfTGYk_ajpjNLNLisR3NSc8tn1EAAAAA 400 (ERROR)

任何帮助/想法/想法将不胜感激

我只是在加我的2美分。

我一直在。net MVC中做类似的实现-我能够像你一样获得令牌,但是list=1功能也不适合我,得到了400个错误的请求代码(如你所发现的)。

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

分解:

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

    Set-Cookie: GUID=<guid value>

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

我不确定在PHP中是如何实现的,但是:)

也快速注意到,我一直试图通过jQuery的$.getJSON$.Ajax方法没有任何成功,因为我使用的浏览器(chrome)对跨域请求有严格的指导方针,它不像uTorrent正在实现JSONP

希望这对你有帮助!

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

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

application/json有时会导致Chrome上的问题,所以在这种情况下你可能想要坚持使用text/plain

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

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

参考:https://github.com/bittorrent/webui/wiki/TokenSystem示例


我遇到了一个类似的问题,试图在python中为当前客户端创建和XMPPBot。

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

当您收到来自token.html的响应时,也捕获cookie信息。通常有两个参数:GUIDsessions。你需要把它们放在所有后续请求的头中——列表API, Getfiles API等。

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

相关内容

  • 没有找到相关文章

最新更新