3

我正在尝试使用新的 Heroku api 来使用 curl 流式传输我的应用程序的日志:这是文档中所说的(https://devcenter.heroku.com/articles/platform-api-reference#app

Streaming is performed by doing an HTTP GET method on the provided logplex url and retrieving log lines utilizing chunked encoding.

所以首先我检索 logplex url:

curl -X POST https://api.heroku.com/apps/my-app/log-sessions \
-H "Accept: application/vnd.heroku+json; version=3" \
-H "Authorization:XXX" -v

然后我在响应中得到类似的东西:

"logplex_url":"https://logplex.heroku.com/sessions/abcdef-079b-4264-a83c-031feb31bfc2?srv=132456798"

所以我又打了一个 curl 电话:

curl -X GET "https://logplex.heroku.com/sessions/abcdef-8a7e-442f-a164-4c64e845b62d?srv=123456798" -H "Transfer-Encoding: chunked"

我有一个持久的连接,但什么都没有......

如果我没有指定 Transfer-Encoding 标头,我会得到日志,但连接会关闭。

真的可以像参考文献中指定的那样流式传输日志吗?

4

1 回答 1

5

这是可能的,不幸的是我写错了,它不是我认为的分块编码。我们确实在 CLI 和 log2viz 中使用了这个接口,但不幸的是它本身并不是标准的 http。

基本上你应该做一个正常的 HTTP 请求并读回 HTTP 响应头。鉴于返回的标头,您通常会从套接字读取,直到读取长度为零,此时您可以假设您已完成并完成。在 logplex 情况下,我们不愿阻塞(可能是无限期地),所以我们继续并返回一个空读取。然后我们只是希望当你完成后你可以简单地关闭套接字。

不幸的是,我无法弄清楚如何使用 cURL 做到这一点。但我可以指出我们在开源中解决这个问题的例子,希望这会有所帮助。

希望这至少有助于澄清当前情况,我将尝试更新文档以反映这一点。感谢您提供详细的报告,如果您有其他问题我可以提供帮助,请告诉我。

于 2013-05-31T20:41:55.283 回答