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 等)
Apache HTTPClient DigestAuth 不转发来自 Challenge 的“不透明”值