Scala/Java 分块下载

Chunked download in Scala/Java

我使用 youtube-dl 获取 YouTube 视频二进制流的 URL,无论出于何种原因我想下载,我都是这样做的:

youtube-dl -f bestaudio -g --skip-download https://www.youtube.com/watch?v=nk5YtLYcH74

在我得到 URL 之后,我 curl 它,有点像这样:

https://r6---sn-gqn-vhgl.googlevideo.com/videoplayback\?id\=afe82f21e356....

或者我当然可以将输出转发到文件中,但这只是为了解释。我想下载它,但暂时不使用 curl,而是使用 Scala HTTP 客户端 akka-http。但那样我得到:

IllegalResponseException: Response Content-Length 195022703 exceeds the configured limit of 8388608

我知道这是一个大流,但 curl 是如何自动完成的?它是如何请求块的,或者它是如何工作的,我应该如何写在Scala/Java?

一些代码和more:

val connectionFlow = Http().outgoingConnectionTls(hostname)
val responseFuture =
  Source.single(HttpRequest(uri = path, method = GET))
    .via(connectionFlow)
    .runWith(Sink.foreach[HttpResponse] { r =>
      logger.info(s"${r.status}")
  })

默认 content-length 为 akka-http 的 8M。

增加 application.conf 文件中 akka http 客户端解析的 max-content-length 值,它应该可以正常工作。

akka.http.client.parsing.max-content-length =78m

关于会议的更多信息和相关信息 link http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala/http/configuration.html