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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache HTTPClient-使用不确定的HTTP GET流相关的知识,希望对你有一定的参考价值。

[英国英国公司之家最近发布了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连接?如果是这样,怎么办?

答案

您可以通过使用无限期地从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。

以上是关于Apache HTTPClient-使用不确定的HTTP GET流的主要内容,如果未能解决你的问题,请参考以下文章

Android 已弃用 apache 模块(HttpClient、HttpResponse 等)

HttpClient发送请求和接收参数

Apache HTTPClient DigestAuth 不转发来自 Challenge 的“不透明”值

Apache HttpClient 制作多部分表单帖子

java 使用apache httpClient客户端将发布数据发送到https而不使用ssl证书验证

HTTPclient 4.2.2 传参数和文件流