在大多数情况下,cURL返回半个json字符串

时间:2013-11-13 09:44:46

标签: php json curl wunderlist

First edit (more details)

  • 我在Firefox中使用了Modify Headers插件并访问了页面(http://api.wunderlist.com/me/tasks),这显示了我需要的完整且正确的json字符串。它永远不会失败(25+测试)
  • 我尝试使用file_get_contents,但file_get_contents也会减少响应。在各个方面。
  • cURL也是如此,在各个点减少了响应json。看起来“随意”

Original post

我在这里遇到一个奇怪的问题。我已经为Wunderlist2(http://www.wunderlist.com)创建了一个PHP Wrapper,可以在这里找到:https://github.com/PENDOnl/Wunderlist2-PHP-Wrapper

在用户通知我该课程突然停止工作之前,它完美无缺。由于我创建了一个免费服务(http://wcal.me)来为Wunderlist用户提供日历提要,因此我决定查看该脚本,因为这是我调试脚本的最简单方法。

登录Wunderlist并获取authtoken作品,该类中的所有其他功能似乎都可以找到(获取'我','我/列表'等)但是,如果是getTasks函数('我/ tasks')我得到的响应不完整,它只是停在json字符串的中间。因此json_decode函数返回NULL,因此日历提要/方法响应中没有任何任务可用。

我也注意到它是随机的,因为在某些情况下(<10%)它的工作方式应该如此,但在另一次刷新后,输出再次减半。此外,每次刷新时“切割”的确切位置也不同。

有没有人可以确定问题所在?我试着看看是否有一种方法可以在返回文件之前等到完整的文件下载,但如果这不是cURL的默认行为,那就太奇怪了。我也尝试增加超时时间,但由于它返回一个值,我猜它也不会超时。

所有代码都可以在Github repo中找到,到目前为止这是我改为调试的唯一部分:

        // get / put / delete requests should have HTTP Code 200 OK
        // only exception is the login method, which returns HTTP Code 200 OK
        if($httpCode == 200 && (strtolower($method) != 'post' || $action == '/login'))
        {
            $return = json_decode($output, true);

            if($_SERVER['REMOTE_ADDR'] == MY_IP) {
                if( is_null($return) ) {
                    echo "<b>Output of json_decode is null:</b><br><br>";
                    echo $output;   
                } else {
                    echo "<b>Output of json_decode os not null:</b><br><br>";
                    echo $output;   
                }
            }

            return $return;
        }

完整的回复应该类似于:

[{"assignee_id":null,"completed_at":null,"completed_by_id":null,"created_at":"2013-11-10T13:16:54Z"},{"assignee_id":null,"completed_at":null,"completed_by_id":null,"created_at":"2013-11-10T13:16:54Z"}]

但在大多数情况下,它是:

[{"assignee_id":null,"completed_at":null,"completed_by_id":null,"created_at":"2013-11-10T13:16:54Z"},{"assignee

当然,这是一个微小的响应,响应中有更多信息可用,并且阵列中还有更多项目。

2 个答案:

答案 0 :(得分:1)

出于测试目的,如果您对该类进行身份验证,浏览到http://api.wunderlist.com/me/tasks会产生什么结果?

另外我确定你已经修复但是在base.class.php中,$ action正在检查空值两次而不是$ action&amp; $方法。

答案 1 :(得分:0)

Wunderlist出现问题,等待修复:)