![](/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.