为了账号安全,请及时绑定邮箱和手机立即绑定

当块到达时,如何使用 java.net.http 读取和打印分块的 HTTP 响应?

当块到达时,如何使用 java.net.http 读取和打印分块的 HTTP 响应?

POPMUISE 2021-10-28 15:48:19
Java 11 引入了一个新包java.net.http,用于发出 HTTP 请求。对于一般用途,它非常简单。我的问题是:java.net.http当客户端收到每个块时,我该如何处理分块响应?java.http.net包含一个BodySubscriber似乎是我想要的反应式,但我找不到它如何使用的示例。http_get_demo.py下面是一个 python 实现,它在块到达时打印块,我想用 java.net.http 做同样的事情:import argparseimport requestsdef main(url: str):    with requests.get(url, stream=True) as r:        for c in r.iter_content(chunk_size=1):            print(c.decode("UTF-8"), end="")if __name__ == "__main__":    parser = argparse.ArgumentParser(        description="Read from a URL and print as text as chunks arrive")    parser.add_argument('url', type=str, help="A URL to read from")    args = parser.parse_args()    main(args.url)HttpGetDemo.java为了完整起见,这里有一个使用 java.net.http 发出阻塞请求的简单示例:import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpResponse;import java.net.http.HttpRequest;public class HttpGetDemo {  public static void main(String[] args) throws Exception {    var request = HttpRequest.newBuilder()            .uri(URI.create(args[0]))            .build();    var bodyHandler = HttpResponse.BodyHandlers            .ofString();    var client = HttpClient.newHttpClient();    var response = client.send(request, bodyHandler);    System.out.println(response.body());  }}HttpAsyncGetDemo.java这是发出非阻塞/异步请求的示例:import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpResponse;import java.net.http.HttpRequest;/** * ReadChunked */public class HttpAsyncGetDemo {  public static void main(String[] args) throws Exception {    var request = HttpRequest.newBuilder()            .uri(URI.create(args[0]))            .build();    var bodyHandler = HttpResponse.BodyHandlers            .ofString();    var client = HttpClient.newHttpClient();    client.sendAsync(request, bodyHandler)            .thenApply(HttpResponse::body)            .thenAccept(System.out::println)            .join();  }}
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信