Java 8 HttpUrlConnection 无法使用 http 协议 2 解析响应

Java 8 HttpUrlConnection fail to parse response with http protocol 2

我们正在 运行 维护一个项目 java 8。现在我们必须通过他们的 api 调用合作伙伴服务器以将一些数据迁移到我们的数据库中。

当我们调用他们的服务器时,出现异常:

Caused by: org.apache.http.ProtocolException: The server failed to respond with a valid HTTP response

这种情况下的响应代码是-1。

所以我尝试使用 curl 从他们的服务器获取数据,我看到他们的响应状态行是:

HTTP/2 200

当 HttpURLConnection 像这样检查时:

    if (statusLine.startsWith("HTTP/1.")) {
        int codePos = statusLine.indexOf(' ');
        if (codePos > 0) {

            int phrasePos = statusLine.indexOf(' ', codePos+1);
            if (phrasePos > 0 && phrasePos < statusLine.length()) {
                responseMessage = statusLine.substring(phrasePos+1);
            }

            // deviation from RFC 2616 - don't reject status line
            // if SP Reason-Phrase is not included.
            if (phrasePos < 0)
                phrasePos = statusLine.length();

            try {
                responseCode = Integer.parseInt
                        (statusLine.substring(codePos+1, phrasePos));
                return responseCode;
            } catch (NumberFormatException e) { }
        }
    }
    return -1;

因为这里的状态行是 2,而不是 1,所以无法读取和解析来自服务器的响应。

但是我们不能只将 Java 升级到更高版本,因为它需要大量测试以确保没有任何问题,有人知道在 java 8 中解决这个问题吗?

你可以利用 HttpClient 5.0 吗?这在 Java 7 及更高版本上支持 HTTP/2(请注意,您的合作伙伴服务不支持以某种形式降级到 HTTP/1.x,这让我有些惊讶?)