![](/img/trans.png)
[英]How to parse Response from HttpURLConnection object in java
[英]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.