繁体   English   中英

Java 8 HttpUrlConnection无法解析具有HTTP协议2的响应

[英]Java 8 HttpUrlConnection fail to parse response with http protocol 2

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

当我们调用他们的服务器时,我们得到了一个例外:

原因:org.apache.http.ProtocolException:服务器无法使用有效的HTTP响应进行响应

在这种情况下,响应代码为-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令我有些惊讶吗?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM