当前位置: 首页 > 面试题库 >

Java HttpURLConnection.getInputStream但获取401 IOException

宋翔
2023-03-14
问题内容

我正在用Java为CouchDB编写REST客户端。以下代码应该非常标准:

    this.httpCnt.connect();
    Map<String, String> responseHeaders = new HashMap<>();
    int i = 1;
    while (true){
        String headerKey = this.httpCnt.getHeaderFieldKey(i);
        if (headerKey == null)
            break;
        responseHeaders.put(headerKey, this.httpCnt.getHeaderField(i));
        i++;
    }
    InputStreamReader reader = new InputStreamReader(this.httpCnt.getInputStream());
    StringBuilder responseBuilder = new StringBuilder();
    char[] buffer = new char[1024];
    while(true){
        int noCharRead = reader.read(buffer);
        if (noCharRead == -1){
            reader.close();
            break;
        }
        responseBuilder.append(buffer, 0, noCharRead);
    }

我想测试如果身份验证失败会发生什么。但是,如果身份验证失败,则在调用getInputStreamHttpURLConnection时,我会直接得到IOException,表示服务器响应401。我想,如果服务器响应了某些内容,无论成功还是失败,它都应该能够读取服务器返回的内容。而且我确定在这种情况下,服务器确实会在主体中返回一些文本,因为如果我GET使用curl对服务器进行验证并且身份验证失败,我将获得一个JSON对象作为响应主体,其中包含一些错误消息。

即使是401,还有什么方法可以得到响应正文吗?


问题答案:

看到这个问题:


根据javadocs,HttpURLConnection.getErrorStream方法将返回InputStream,该InputStream可用于从错误条件(例如404)中检索数据。”



 类似资料:
  • 问题内容: 我正在使用mongodb和redis,redis是我的缓存。 我用redis-py缓存mongodb对象: 使用hgetall(key,obj)从redis获取的obj是: 如您所见,从缓存中获取的obj是str而不是unicode,因此在我的应用中出现错误,例如:’ascii’编解码器无法解码位置12的字节0xe6:序数不在范围(128)中 任何人都可以提出建议吗?感谢你 问题答案:

  • 我有一个API,它返回的数据类型为_HttpClientResponse,因为我使用的是httpClient,我使用下面的 当我打印结果i/flatter(23708):字符串i/flatter(23708):{“结果”:[{“IPAddress”:“192.1.1.1”,“说明”:“Windows 2016 Server”},{“IPAddress”:“192.1.1.1”,“说明”:“Wind

  • 我试图用Axios向一个需要API密钥作为头的API发出get请求,但我不确定我做错了什么。控制台中有两个错误。1:xhr。js:178个选项https://api.propublica.org/congress/v1403(禁止)。2:加载失败https://api.propublica.org/congress/v1:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access co

  • 我已经查看了所有关于CORS错误的其他问题,但运气不好。我正在NuxtJS客户端应用程序中发出一个简单的POST请求。如果我使用axios,我会得到CORS错误,但如果我使用fetch,它工作得很好。我想使用axios,但我无法解决这个问题。服务器设置了正确的“Access Control Allow Origin”标头(删除该标头时,以下两个选项都不起作用)。有人知道为什么fetch可以工作,但

  • 问题内容: 我正在做一个编程项目,并不断收到如下所示的错误。 我认为这是因为扫描仪read.nextLine()超出了文本文件的末尾。但是我在hasNextLine中使用了while循环,所以我不确定为什么会这样。有人知道我要去哪里了吗? 关联文本文件 问题答案: 将仅检查一个新行。您只检查了一行就无法阅读两行。 如果您必须不断读取记录,则可以

  • 问题内容: 我将解释我在示例中需要做的事情。首先,我们有一个像这样的简单表,名为 table : 现在查询: 将使我们得到与这一结果相似的结果: 但是是否有可能收集 name的 所有值来得到这样的结果? 问题答案: 使用MySQL可以使用GROUP_CONCAT(expr) 此函数返回一个字符串结果,其中包含来自组的串联的非NULL值。如果没有非NULL值,则返回NULL。完整语法如下: 就像是