当前位置: 首页 > 知识库问答 >
问题:

URL连接:如何获取返回状态的正文!=200?

松景铄
2023-03-14

我有一个Web服务,有时返回401状态。它附带一个JSON主体,类似于:

{"status": { "message" : "Access Denied", "status_code":"401"}}

下面是我用来发出服务器请求的代码:

HttpURLConnection conn = null;
try{
   URL url = new URL(/* url */);
   conn = (HttpURLConnection)url.openConnection(); //this can give 401
   JsonReader reader = new JsonReader(new InputStreamReader(conn.getInputStream()));

   JsonObject response = gson.fromJson(reader, JsonObject.class);
   //response handling
}catch(IOException ex){
       System.out.println(conn.getResponseMessage()); //not working
}

当请求失败时,我希望读取json正文,但是getResponseMessage只会给我一个通用的“未经授权的”。。。那么如何检索JSON呢?

共有1个答案

施永宁
2023-03-14

在非200响应的情况下,可以调用conn.getErrorStream()

HttpURLConnection conn = null;
try {
    URL url = new URL(/* url */);
    conn = (HttpURLConnection)url.openConnection(); //this can give 401
    JsonReader reader = new JsonReader(new InputStreamReader(conn.getInputStream()));

    JsonObject response = gson.fromJson(reader, JsonObject.class);
} catch(IOException ex) {
    JsonReader reader = new JsonReader(new InputStreamReader(conn.getErrorStream()));
    JsonObject response = gson.fromJson(reader, JsonObject.class);
}

在堆栈溢出数据库中进行粗略搜索会让您看到本文,其中提到了此解决方案。

 类似资料:
  • 问题内容: 我正在尝试让Apache HttpClient触发HTTP请求,然后显示HTTP响应代码(200、404、500等)以及HTTP响应正文(文本字符串)。重要的是要注意我正在使用,因为那里有大多数HttpClient示例,并且API从版本3到版本4有了很大的变化。 不幸的是,我只能使HttpClient返回状态代码 或 响应正文(但不能同时返回两者)。 这是我所拥有的: 所以我问: 使用

  • 问题内容: 我正在使用Socket.io,并且想知道从客户端到服务器的连接状态。 像这样: 如果连接断开或由于任何原因断开连接,我需要此信息来向用户提供视觉反馈。 问题答案: 您可以检查属性: 它是动态更新的,如果连接丢失,它将设置为,直到客户端再次选择连接为止。很容易检查或类似的东西。 另一个解决方案是捕获事件并自己跟踪状态。

  • ap.getConnectedBluetoothDevices(OPTION | services | service, CALLBACK) 根据 service 的 uuid 获取处于已连接状态的设备。可直接传入一个数组作为 OPTION.services 参数。也可直接传入一个字符串作为 OPTION.services 的第一项。 OPTION 参数说明 名称 类型 必填 描述 service

  • JSoup似乎可以处理我尝试过的所有URL,但这一个给了我400个错误。 我得到的错误是:

  • 问题内容: 我正在尝试在运行时使用代理创建URL连接。我的代码如下: 但这是行不通的。有人知道为什么吗? 问题答案: 添加答案以帮助将来的访客

  • 我正在通过shellscript的直线执行配置单元查询。下面是一个代码示例:我看到即使连接到Hive数据库失败,$?仍将返回零作为退出代码。对于下面这样的用例,如何从beeline获取退出代码/连接状态?一旦beeline无法连接到DB,我需要停止shellscript的执行,并且应该记录一条适当的消息,提示配置单元连接失败。