【问题标题】:Chunked download in Scala/JavaScala/Java 中的分块下载
【发布时间】:2015-07-26 22:11:50
【问题描述】:

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

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

获得 URL 后,我将其 卷曲,就像这样:

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}")
  })

【问题讨论】:

  • "curl 是如何自动完成的?" -> 没有限制。

标签: java scala youtube chunked


【解决方案1】:

akka-http 的默认内容长度为 8M。

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

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

有关此链接上的配置和信息的更多信息 http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala/http/configuration.html

【讨论】:

  • 谢谢,这刚刚解决了我的问题 :)) 我实际上想处理块并使用实用程序来定义数据应该有多大的数据包,以及在反应性背压流中。我会继续努力弄明白的。
猜你喜欢
  • 2011-08-09
  • 2015-04-11
  • 2019-08-08
  • 2012-08-23
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多