【问题标题】:Strange behaviour of Android HttpURLConnection.getInputStream in HTTP POSTHTTP POST 中 Android HttpURLConnection.getInputStream 的奇怪行为
【发布时间】:2017-05-15 16:16:16
【问题描述】:

以下代码在 Spring 中向 REST API 发出 HTTP POST:

    ...
    HttpURLConnection connection = null;
    InputStream input = null;
    BufferedWriter output = null;
    BufferedReader reader = null;
    String result = null;
    try {
        connection = (HttpURLConnection) new URL(url).openConnection();
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        connection.setRequestProperty("Content-Type", "application/json");
        //Send data
        output = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
        output.write(data);
        output.flush();
        //Read response
        int responseCode = connection.getResponseCode();
        if (responseCode >= 400) {
            input = connection.getErrorStream();
        } else {
            input = connection.getInputStream();
        }
        reader = new BufferedReader(new InputStreamReader(input));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line).append('\n');
        }
        result = "Status " + responseCode + ".\n" + sb.toString();
        ...

其中 url 包含 REST API 端点,data 是一个 JSON 转换为字符串,带有 POST 中所需的用户属性。

问题是,虽然 POST 按预期工作,但在我获得 HTTP 状态 201 后,我无法获得 API 返回的响应正文(但它在出现错误的情况下有效,例如 HTTP 状态 409)。奇怪的是,readline() 函数在第一次读取时总是返回 null。该 API 可以完美地从 Postman 调用它,甚至可以从 Eclipse 中的 Java 项目运行该代码。

我的 compileSdkversiontargetSdkVersion 设置为 25。

我将我的代码与网上的大量HttpURLConnection 示例进行了比较,到处应用更改,但没有成功...

有什么想法吗?

【问题讨论】:

标签: java android spring rest httpurlconnection


【解决方案1】:

比较PostmanAndroid APP 发送的HTTP 标头后,我注意到通过将标头Accept: */* 添加到POST 请求(如Postman 所做的那样),它按预期工作。根据HTTP specification没有任何 Accept 标头字段的请求意味着用户代理将接受任何媒体类型作为响应。,所以它应该在没有 Accept 标头的情况下工作(作为 GET 到相同的 API)。

对我来说,这似乎是 Spring API 方面的错误、错误配置或“正常”行为,与 Android HttpURLConnection 模块无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-11
    • 2015-03-06
    • 1970-01-01
    • 2011-01-09
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多