簡體   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