0

現在開発中のプロジェクトに関する統計を推測するために、GitHub API と通信するアプリケーションを実装しています。を使用して、リクエストを非同期的に行うことにしHttpAsyncClientました。

私の問題は、すべてのリクエストを実行し、API からすべてのレスポンス (約 150 件) を取得した後、コンテンツを読み取ろうとすることです。

String content = EntityUtils.toString(response.getEntity());

~120 の応答が読み取られた後、次の SSLException が発生します。

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()が、応答リストの最後まで機能します。ブロックを削除httpClient.shutdown()しても問題は解決しません(コンテンツを読み取る前に実行されます)。finally

スタックトレースから、例外が行にスローされていると結論付けました

while((l = reader.read(tmp)) != -1)

エンティティはHttpResponse何らかの形で時代遅れになっていますか? 私の推論に誤りがあると思いますか? 最初の 120 の応答が適切に解析された後、SSLException がスローされる理由は何ですか?

どんな助けでも大歓迎です:)

4

1 に答える 1

0

これは、openssl のバージョンにも依存している可能性があります。私が管理している Python プロジェクトでは、openssl 0.9.8 で、人々が短期間に多数の SSL リクエストを行うとエラーが発生することがわかりました。確かに、エラー メッセージとはまったく異なりますが、openssl 1.0 にアップグレードすると役立つ場合があります。

于 2013-04-02T15:26:59.040 に答える