我们正在维护一个目前运行在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中修复这个问题吗?
发布于 2019-06-25 11:34:25
你能利用HttpClient 5.0吗?这在Java 7和更高版本上支持HTTP/2 (请注意,我对您的合作伙伴服务不支持某种形式的HTTP/1.x降级表示有点惊讶?)
https://stackoverflow.com/questions/56752853
复制相似问题