【问题标题】:Java Apache HTTP ClientJava Apache HTTP 客户端
【发布时间】:2018-12-07 18:18:19
【问题描述】:

在 Stack Overflow 上提出的第一个问题,请保持温和。我一直在练习我的 Java,我正在尝试 Apache 的 HTTP 客户端。连接到 xbox api 时,我收到状态码 200。这对我来说意味着我将密钥正确传递给了标题,现在我应该能够从不同的端点提取我的个人资料了。

我的问题是在 response.getEntity() 之后我接下来要调用什么?我一直在尝试将数据打印到控制台,以确保我得到的是我想要的。但是,我不断收到一个空指针异常,我认为这说明体内什么都没有?最终结果是然后将 json 转换为 java 对象。任何援助将不胜感激。谢谢

public static void main(String[] args) {

    HttpResponse response = new BasicHttpResponse(
            HttpVersion.HTTP_1_1,
            HttpStatus.SC_OK,
            "OK");

    HttpClient client = HttpClients.custom().build();
    HttpUriRequest request = RequestBuilder.get()
            .setUri(url)
            .setHeader(HttpHeaders.CONTENT_TYPE, "application/json")
            .setHeader(HttpHeaders.AUTHORIZATION, apiKey)
            .build();
    try {
        client.execute(request);
        System.out.println(response.getStatusLine().getStatusCode());

        HttpEntity entity = response.getEntity();
        entity.getContent();


    } catch (IOException e) {
        e.printStackTrace();
    }

【问题讨论】:

  • 类似response = client.execute(request);?

标签: java apache-httpclient-4.x


【解决方案1】:

方法的签名

 HttpResponse execute(HttpUriRequest request)
    throws IOException, ClientProtocolException;

所以本质上你应该从被调用的方法中得到响应。

只修改一行代码

response=client.execute(request);

这应该填充响应并在调用任何响应方法之前始终检查 null。 像这样的

if(response!=null && response.getEntity()!=null) {
 HttpEntity entity = response.getEntity();
}

【讨论】:

  • 添加上面的代码后,我现在得到一个 401 响应代码。为什么它不会通过身份验证返回 200 之前和现在更改?最后一个好处是我使用 .setHeader(HttpHeaders.AUTHORIZATION, apiKey) 为 X-Auth 正确设置了标头参数。
【解决方案2】:

我认为您应该尝试发出 curl 命令并查看作为响应返回的内容...

【讨论】:

    【解决方案3】:

    是的,401 的响应是我认为标题设置不正确。我最终更改了标题代码:

    .setHeader("X-AUTH", apiKey)

    授权与 X-Auth 不同。我不知道我可以将它作为字符串输入。谢谢大家引导我走向正确的方向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 2011-03-04
      相关资源
      最近更新 更多