Apache HTTPClient-使用不确定的HTTP GET流

问题描述 投票:0回答:1

[英国英国公司之家最近发布了HTTP 'stream' webservice,以允许开发人员无限期地聆听公司的变化。

下面是他们帮助页面的重要部分

建立与流式API的连接涉及长期运行的HTTP请求,并逐步处理每个响应线。从概念上讲,您可以将其视为无限下载通过HTTP的长文件。

使用Apache HTTP客户端,我可以使用以下kotlin代码在http客户端库的调试控制台输出中看到公司更改的“流”

val httpClient = HttpClients.createDefault()
    val request = HttpGet("https://stream.companieshouse.gov.uk/companies")
    request.addHeader("Authorization", "xxxxxxxxxxxxx");
    httpClient.execute(request).use { response1 ->
        val entity: HttpEntity = response1.entity
        entity.content?.use { inputStream -> println("output-->" + String(inputStream.readAllBytes())) }
    }

但是,我的控制台输出从未被命中(即,上面的'output->'的打印字符串)]

问题:使用Apache HTTP Client,是否可以使用不确定的HTTP Get连接?如果是这样,怎么办?

java kotlin httpclient apache-httpclient-4.x
1个回答
0
投票

您可以通过使用无限期地从http响应实体返回的流来实现此行为。

这是您如何执行此操作的Java示例。

    var request = new HttpGet("https://stream.companieshouse.gov.uk/companies");
    request.addHeader(HttpHeaders.AUTHORIZATION, auth);

    try (var stream = client.execute(request).getEntity().getContent()) {
        var buffered = new BufferedReader(new InputStreamReader(new BufferedInputStream(stream)));

        while (true) {

          String value = buffered.readLine();

          if(!value.isBlank()) {
            System.out.printf("Event: %s ", value);
          }
        }
    }

应该可以将代码段转换为Kotlin。

© www.soinside.com 2019 - 2024. All rights reserved.