httpプロキシを実行しているときに、クライアントがサーバーに要求した後にサーバーからの応答の解凍に問題が発生しました。GZIP HTTPリクエストの一部を解凍します。
など。 クライアントはhttps://stackoverflow.com/questions/some_questionを送信します。 サーバーはいくつかの部分で応答を送信します。 私は以下の方法を使って応答部分を解凍します。 ZLIB入力ストリームの予期しない終わり
応答の残りの部分は小文字になります。応答の最初の部分で
public static void gzipToString(ByteBuf buf) throws IOException {
Reader reader = null;
reader = new InputStreamReader(new GZIPInputStream(new ByteBufInputStream(buf)));
while (true) {
int ch = reader.read();
if (ch==-1) {
break;
}
System.out.print((char)ch);
}
}
私はcomjava.io.EOFExceptionを取得するいくつかの点で
<!DOCTYPE html>
<html itemscope itemtype="http://schema.org/QAPage">
<head>
<title>java - GZIPInputStream to String - Stack Overflow</title>
<link rel="shortcut icon" href="https://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico?v=4f32ecc8f43d">
<link rel="apple-touch-icon image_src" href="https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png?v=c78bd457575a">
<link rel="search" type="application/opensearchdescription+xml" title="Stack Overflow" href="/opensearch.xml">
<meta name="twitter:card" content="summary">
<meta name="twitter:app:id:googleplay" content="comjava.io.EOFException: Unexpected end of ZLIB input stream
を取得しますこの行の例外を除いて
reader = new InputStreamReader(new GZIPInputStream(new ByteBufInputStream(buf)));
java.util.zip.ZipException: Not in GZIP format
at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:165)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:79)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:91)
at com.verizon.ga.filter.ProxyHttpFilters.gzipToString3(ProxyHttpFilters.java:143)
at com.verizon.ga.filter.ProxyHttpFilters.serverToProxyResponse(ProxyHttpFilters.java:73)
最初の応答では、私はEOF例外は私が応答 応答を適切に解凍すると思うと私は応答のすべての部分をまとめる必要があります。
しかし、他のすべての部分はGZIP形式ではありません。 私が理解しているように、最初の部分だけがGZIPヘッダを持っています。 GZIP圧縮されている間はヘッダーがありません。
どうすればいいですか?