【问题标题】:HTTP request not returning desired jsonHTTP 请求未返回所需的 json
【发布时间】:2013-04-16 16:19:53
【问题描述】:

我正在尝试向应该返回 json 响应的网站发送 http 请求。问题是我没有得到 json 数据。但是当我将 url 粘贴到浏览器中时,它会显示 json 输出。我是新手。请帮忙。

这是我的代码

HttpClient client = new DefaultHttpClient();
String url="http://directclientvendors.com/news24/api/get.php?type=news";
HttpGet request = new HttpGet(url);
HttpResponse response;
response = client.execute(request);
BufferedReader br = 
    new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

String line = "";

while(br.ready())
{
    line+=br.readLine();
}
System.out.println("line "+line);

【问题讨论】:

  • 输出的原样是什么?
  • 输出:行。它甚至没有进入 while 循环。

标签: java json http httpclient


【解决方案1】:

您应该执行GET 请求而不是POST。请将请求类型更改为HttpGet。当您将URL 粘贴到地址栏并按回车键时,浏览器会在URL 上执行GET

另外使用 Reader + StringBuilder / JsonReader / GSON 从 URL 的响应内容中读取。字符串连接会导致不必要地创建额外的对象。

[编辑]

令我惊讶的是,即使调用POST 来获取资源,API 调用也能正常工作。问题一定出在你的解析逻辑上。使用JsonReader 对我来说很好。这只是模板代码,但您可以填写其余部分以获取其他 JSON 元素。无论POST 是否有效,您仍应使用GET 进行此调用。

        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet("http://directclientvendors.com/news24/api/get.php?type=news");
        HttpResponse response = client.execute(request);
        InputStream content = response.getEntity().getContent();
        JsonReader jsonReader = new JsonReader(new InputStreamReader(content, "UTF-8"));
        jsonReader.beginObject();
        if(jsonReader.hasNext())
        {
            System.out.println(jsonReader.nextName()); // prints 'news'
            // BEGIN_ARRAY etc to parse the rest
        }
        // END_OBJECT and cleanup

【讨论】:

    猜你喜欢
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多