首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >http4s解压缩压缩http响应

http4s解压缩压缩http响应
EN

Stack Overflow用户
提问于 2020-07-23 13:11:31
回答 2查看 370关注 0票数 1

我尝试在客户端解压缩gzipped简单响应。用http4s做这件事的合适方法是什么?

代码语言:javascript
复制
import cats.effect.{Blocker, ContextShift, IO, Timer}
import java.util.concurrent._
import org.http4s.{Header, Headers, HttpVersion, Method, Request}
import org.http4s.client.{Client, JavaNetClientBuilder}
import org.http4s.implicits._

import scala.concurrent.ExecutionContext.global
implicit val cs: ContextShift[IO] = IO.contextShift(global)
implicit val timer: Timer[IO] = IO.timer(global)

val blockingPool = Executors.newFixedThreadPool(5)
val blocker = Blocker.liftExecutorService(blockingPool)
val httpClient: Client[IO] = JavaNetClientBuilder[IO](blocker).create
val uriYandex = uri"https://ya.ru"

val lstHeader: List[Header] =List(
  Header("Accept","text/plain")
  ,Header("Accept-Charset","utf-8")
  ,Header("Accept-Encoding","*")
)

val request2 = Request[IO](Method.GET, uriYandex, HttpVersion.`HTTP/2.0`, Headers(lstHeader))
val httpReq = httpClient.expect[String](request2)
val app = httpReq.map(resString => resString)

app.unsafeRunSync

如果我在IDEA Scala工作表中运行http4s版本"0.21.3“。它工作良好,输出如下:

res0: class==

res0: String =?p?320?,Y??+d?9?&6&66 F?3??{??7?

我试过不同的译码器,但有了这个错误:

失败(java.util.zip.ZipException:不采用GZIP格式)

EN

回答 2

Stack Overflow用户

发布于 2020-07-24 00:51:50

您不能只发送Accept-Encoding头,因为当您执行httpClient.expect[String]时,HTTP将尝试将数据解码为一个字符串,并且它不知道它需要首先解压缩数据。

尝试使用GZip中间件

票数 2
EN

Stack Overflow用户

发布于 2020-07-24 07:45:39

谢谢大家。我解决了下一次使用GZip的问题。

代码语言:javascript
复制
import org.http4s.client.middleware.GZip
val gzClient = GZip()(httpClient)
val httpReq = gzClient.expect[String](request2)
val app = httpReq.map(resString => resString)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63055100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档