我正在實施一個與GitHub API進行通信的應用程序,以便推斷當前開發的項目的一些統計信息。我選擇使用HttpAsyncClient
異步發出請求。當試圖讀取HttpResponse的內容時出現SSLException
我的問題是,在我執行的所有請求,並得到所有從API的響應(其中約150),我嘗試後〜讀取與
String content = EntityUtils.toString(response.getEntity());
我得到以下異常SSLException內容120回覆如下:
Exception in thread "main" javax.net.ssl.SSLException: SSL peer shut down incorrectly
at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:557)
at sun.security.ssl.InputRecord.read(InputRecord.java:509)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:883)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:840)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:94)
at org.apache.http.impl.io.AbstractSessionInputBuffer.read(AbstractSessionInputBuffer.java:204)
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:182)
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:138)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:282)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:324)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:176)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.Reader.read(Reader.java:140)
at org.apache.http.util.EntityUtils.toString(EntityUtils.java:224)
at org.apache.http.util.EntityUtils.toString(EntityUtils.java:264)
at pl.xsolve.githubmetrics.github.OwnGitHubClient.extractBodyFromResponse(OwnGitHubClient.java:117)
當我大幅減少請求數量(例如減少一半)時,問題就消失了。此外,所有回覆均包含HTTP/1.1 200 OK
- 我已使用response.getStatusLine()
進行了檢查,並且它一直運行至響應列表的最後。 即使我在finally
塊中刪除httpClient.shutdown()
(在讀取內容之前執行該塊),問題仍然存在。
從堆棧跟蹤,我的結論是,異常就行
while((l = reader.read(tmp)) != -1)
拋出是在HttpResponse
實體越來越莫名其妙過時?你在我的推理中看到錯誤嗎?什麼可能是爲什麼前120個響應被正確解析然後SSLException被拋出的原因?
任何幫助,將不勝感激:)