调用远程服务的奇怪问题

时间:2011-04-20 19:40:15

标签: grails groovy

我是Grails和Groovy的新手,但我的问题很简单却很奇怪。 我正在调用远程Web服务,如下所示:

    public Boolean addInvites(eventid,sessionkey ){

        String url = this.API_URL+"AddInvites?apikey=${sessionkey}&eventid=${eventid}&userids[]=5&userids[]=23";

        def callurl = new URL(url);
        println callurl;

        def jsonResponse = callurl.getText();
        println jsonResponse;
        def jsonParsedObject = JSON.parse(jsonResponse);

        if(jsonParsedObject){
            println jsonParsedObject;
            if(jsonParsedObject.code == 200){

                return true;
            }
        }
    }



    return false;

}

这里的API_URL是“https://api..com/” 通常使这些调用正常。 Json返回并解析。但是使用上面的方法,如果我只添加一个userids [] = 5然后它工作正常但如果我添加第二个一切都挂起后“println callurl;”

我已经检查了网络服务端,并且调用发生了,一切都按预期工作。如果我在浏览器中调用它,它可以正常工作。但是从grails web应用程序它只是挂起。我知道我可能在这里做些傻事,但我真的被卡住了。希望你们能帮忙。

2 个答案:

答案 0 :(得分:0)

你确定[]字符应该在那里吗?如果在查询字符串的末尾使用以下内容,它将有效地将userids = [5,23]传递给服务器:

&userids=5&userids=23

如果确实需要括号,请改为使用网址转义值%5B%5D

答案 1 :(得分:0)

首先,您应该考虑以下错误条目:

http://jira.codehaus.org/browse/GROOVY-3921

URL.getText()未指定连接超时。

如果您有权访问服务器日志,请检查是否实际收到了来自您的grails应用程序的请求(添加第二个userids []参数时)。如果不是这种情况,您可能必须使用tcpdump或Wireshark才能在TCP级别进行调试。