MyRequest:
WS.url(url)
.withHeaders("Accept-Encoding" -> "gzip")
.withQueryString("xxx","xxx")用于解压缩身体的代码
def call[T](api: WeiboApi[T])(implicit mf: Manifest[T]) = {
val param = parameters(api)
(api match {
case _: Get[T] => get(api.url, param)
case _: Post[T] => post(api.url, param)
}) map {
resp =>
try {
val decompressedBody = decompressIfGzip(resp)
api.parse(decompressedBody)
} catch {
case e: WeiboApiError => throw e
case e: Exception =>
throw new Exception("cannot parse body api " + api, e)
}
}
}
private def decompressIfGzip(resp: Response) = {
val ahcResp = resp.getAHCResponse
ahcResp.getHeader("Content-Encoding") match {
case "gzip" | "GZIP" =>
val in = ahcResp.getResponseBodyAsStream
val gzipStream = new GZIPInputStream(in)
try {
val source = scala.io.Source.fromInputStream(gzipStream)
source.mkString
} finally {
in.close()
}
case _ =>
ahcResp.getResponseBody
}
}然后我同时发送两个请求。
有时候很好 但有时它会指责
[error] Corrupt GZIP trailer
[error] sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
[error] sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
[error] sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
[error] lib.weibo.Weibo$.lib$weibo$Weibo$$decompressIfGzip(Weibo.scala:138)
[error] lib.weibo.Weibo$$anonfun$call$1.apply(Weibo.scala:47)
[error] lib.weibo.Weibo$$anonfun$call$1.apply(Weibo.scala:42)
[error] akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.processBatch$1(BatchingExecutor.scala:67)错误akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:82)错误akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply(BatchingExecutor.scala:59)错误akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply(BatchingExecutor.scala:59) akka.dispatch.BatchingExecutor$Batch.run(BatchingExecutor.scala:58)错误akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:42)错误akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
怎么了?
发布于 2014-02-13 09:23:51
结果发现,响应数据有时是损坏的。
发布于 2014-01-10 17:02:29
不确定,但您可能需要用InputStreamReader包装代码:
https://stackoverflow.com/questions/3627401/gzipinputstream-to-string/3627441#3627441
https://stackoverflow.com/questions/21039455
复制相似问题