JDK 9 里的 JDK HTTP Client 的写法

2018-01-20 19:09:03 +08:00
 Livid

来自 https://blogs.oracle.com/java/jdk-http-client

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("http://openjdk.java.net/"))
      .build();
client.sendAsync(request, asString())
      .thenApply(HttpResponse::body)
      .thenAccept(System.out::println)
      .join();

还可以指定使用 HTTP/2:

HttpClient client = HttpClient.newBuilder()
      .version(Version.HTTP_2)
      .followRedirects(Redirect.SAME_PROTOCOL)
      .proxy(ProxySelector.of(new InetSocketAddress("www-proxy.com", 8080)))
      .authenticator(Authenticator.getDefault())
      .build();
7513 次点击
所在节点    Java
38 条回复
cevincheung
2018-01-20 19:25:57 +08:00
还是喜欢 Go&py
netsail
2018-01-20 19:56:10 +08:00
version ( HTTP/1.1 or HTTP/2 )
不错!
h4lbhg1G
2018-01-20 19:58:21 +08:00
要是 server 也是一行 cli 代码就好了
Boyizmen
2018-01-20 20:03:55 +08:00
感觉基本操作就可以不用 apache 的 httpclient 了
[https://minei.me/archives/302.html]( https://minei.me/archives/302.html)
zjp
2018-01-20 20:08:26 +08:00
看很多对 Java9 的介绍都没有提到这个
这语法风格比用 HttpUrlConnection 爽多了
lonenol
2018-01-20 20:10:05 +08:00
这个还在孵化的包里,估计不是很成熟吧.
joyfun
2018-01-20 20:22:21 +08:00
合作方软件不支持 9,已经建议继续使用 8 了
wdlth
2018-01-20 21:44:53 +08:00
OKHttp3 哭了……
mikulch
2018-01-20 21:51:06 +08:00
就问到底有没有 restTemplate 屌?
night98
2018-01-21 01:12:19 +08:00
。。。。。还是这么长,写 java 就不能稍微简洁一点吗
aristotll
2018-01-21 01:25:20 +08:00
@night98 #10 这是 fluent api 要短你像 python requests 那种传 json 就类型不安全了
boywang004
2018-01-21 09:10:06 +08:00
看了看上面回答,想起一个段子:
为什么程序员都没女盆宇?因为他们都在互相比谁比谁更短……=__=b
mchl
2018-01-21 10:22:19 +08:00
还是喜欢 PHP😀
LINAICAI
2018-01-21 11:07:35 +08:00
@night98 这是链式调用,参数自由组合,这个例子参数很多而已,你换别的语言都一样……
LosLord
2018-01-21 11:28:35 +08:00
@night98 当然可以了,但是这样就丢失了灵活性。
想一行代码解决?当然可以了,自己封装一下就 ok 了。
qqpkat2
2018-01-21 11:50:39 +08:00
还是 jsoup 简单暴力
hantsy
2018-01-21 14:41:50 +08:00
还是 Spring 简单。

WebClient client = WebClient.create("http://localhost:8080");

client
.get()
.uri("/posts")
.exchange()
.flatMapMany(res -> res.bodyToFlux(Post.class))
.log()
.subscribe(post -> System.out.println("post: " + post));
zouqiang
2018-01-21 15:55:20 +08:00
哈哈,okhttp,Unirest 用起来也不错
LINAICAI
2018-01-21 16:27:54 +08:00
@LosLord 没错,底层必须要好扩展灵活性封装,实际用的时候自己再封装一层,因为到客户端应用时一般不需要很多参数设定,比如.version,不可能一个请求是 http1.0,另外一个请求是 http2.0
winglight2016
2018-01-21 16:28:37 +08:00
两个冒号连在一起是什么语法?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/424563

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX