<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Http2 on ffff65535</title><link>https://blog.ffff65535.com/tags/http2/</link><description>Recent content in Http2 on ffff65535</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 26 Oct 2022 15:00:00 +0800</lastBuildDate><atom:link href="https://blog.ffff65535.com/tags/http2/index.xml" rel="self" type="application/rss+xml"/><item><title>jdk11 httpclient的基本使用</title><link>https://blog.ffff65535.com/posts/2022/10/26/jdk11-httpclient/</link><pubDate>Wed, 26 Oct 2022 15:00:00 +0800</pubDate><guid>https://blog.ffff65535.com/posts/2022/10/26/jdk11-httpclient/</guid><description>&lt;p>构建请求参数&lt;strong>java.net.http.HttpRequest&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>请求 URI&lt;/li>
&lt;li>请求类型（GET、PUT、POST、DELETE）&lt;/li>
&lt;li>请求体&lt;/li>
&lt;li>超时时间&lt;/li>
&lt;li>请求请求头&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>HttpRequest request &lt;span style="color:#f92672">=&lt;/span> HttpRequest.&lt;span style="color:#a6e22e">newBuilder&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 请求url&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">uri&lt;/span>(URI.&lt;span style="color:#a6e22e">create&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;http://openjdk.java.net/&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 超时时间&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">timeout&lt;/span>(Duration.&lt;span style="color:#a6e22e">ofMinutes&lt;/span>(1))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 请求头&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">header&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;Content-Type&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;application/json&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 请求类型GET、POST、PUT、DELETE&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">POST&lt;/span>(HttpRequest.&lt;span style="color:#a6e22e">BodyPublishers&lt;/span>.&lt;span style="color:#a6e22e">ofString&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;请求体&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">build&lt;/span>();
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="发送请求javanethttphttpclient">发送请求java.net.http.HttpClient&lt;/h3>
&lt;ul>
&lt;li>首选协议版本（ HTTP/1.1 或 HTTP/2 ）&lt;/li>
&lt;li>是否跟随重定向&lt;/li>
&lt;li>代理&lt;/li>
&lt;li>身份验证器&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>HttpClient client &lt;span style="color:#f92672">=&lt;/span> HttpClient.&lt;span style="color:#a6e22e">newBuilder&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 首选协议版本 默认情况下，客户端将使用 HTTP/2发送请求。发送到尚不支持 HTTP/2的服务器的请求将自动降级为HTTP/1.1。&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">version&lt;/span>(HttpClient.&lt;span style="color:#a6e22e">Version&lt;/span>.&lt;span style="color:#a6e22e">HTTP_2&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 重定向策略&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">followRedirects&lt;/span>(HttpClient.&lt;span style="color:#a6e22e">Redirect&lt;/span>.&lt;span style="color:#a6e22e">NORMAL&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 代理&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">proxy&lt;/span>(ProxySelector.&lt;span style="color:#a6e22e">of&lt;/span>(&lt;span style="color:#66d9ef">new&lt;/span> InetSocketAddress(&lt;span style="color:#e6db74">&amp;#34;www-proxy.com&amp;#34;&lt;/span>, 8080)))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 超时时间&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">connectTimeout&lt;/span>(Duration.&lt;span style="color:#a6e22e">ofSeconds&lt;/span>(6))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">build&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">try&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 发送同步请求&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">var&lt;/span> response &lt;span style="color:#f92672">=&lt;/span> client.&lt;span style="color:#a6e22e">send&lt;/span>(request, HttpResponse.&lt;span style="color:#a6e22e">BodyHandlers&lt;/span>.&lt;span style="color:#a6e22e">ofString&lt;/span>());
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 发送异步请求&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">var&lt;/span> future &lt;span style="color:#f92672">=&lt;/span> client.&lt;span style="color:#a6e22e">sendAsync&lt;/span>(request, HttpResponse.&lt;span style="color:#a6e22e">BodyHandlers&lt;/span>.&lt;span style="color:#a6e22e">ofString&lt;/span>());
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">var&lt;/span> responseAsync &lt;span style="color:#f92672">=&lt;/span> future.&lt;span style="color:#a6e22e">get&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> } &lt;span style="color:#66d9ef">catch&lt;/span> (IOException e) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">throw&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> RuntimeException(e);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> } &lt;span style="color:#66d9ef">catch&lt;/span> (InterruptedException e) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">throw&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> RuntimeException(e);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> } &lt;span style="color:#66d9ef">catch&lt;/span> (ExecutionException e) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">throw&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> RuntimeException(e);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>直接使用默认设置发送请求&lt;/p></description></item></channel></rss>