译文——OkHttp, 安卓和Java应用的HTTP&HTTP2.0客户端

原文地址:http://square.github.io/okhttp/

概述

HTTP是现代应用网络交互数据信息和媒介影像的主要传输方式。更有效率的HTTP传输会使你的互联网应用加载更快,同时节省带宽。

OkHttp是一个HTTP的客户端,能够有效地完成:

  1. 使用HTTP 2.0协议传输,所有请求使用同一个域名,共享一个socket。
  2. 如果HTTP2.0 不可用,通过连接池可以减少请求延迟
  3. 透明的GZIP压缩减少了包下载的大小
  4. 响应缓存避免了网络重复请求

OkHttp坚持认为网络环境是复杂混乱且问题不断的。因此,他充分考虑了高可用,能够自发地从连接问题中恢复: 
如果你的服务能够提供多个IP地址,当第一次连接失败后,OkHttp会尝试连接备选IP地址,当服务端是多数据中心架构时,这种方式相当有用。 
OkHttp初始化新连接时采用的是新的TLS协议,比如SNI、ALPN,如果握手失败,会降级为采用TLS 1.0协议。

使用OkHttp很简单,API设计合理且不会轻易改变。同时支持同步阻塞式调用和异步回调函数调用。

版本支持:OkHttp支持安卓2.3及以上版本,JDK要求1.7及以上

下载及引用

要使用OkHttp,你需要同时支持Okio,用于快速IO和可调整的缓冲区,最新Jar的下载地址这里写链接内容 
OkHttp代码,实例,文档都共享在Github上。

MAVEN地址

<dependency> <groupId>com.squareup.okhttp3<!--> <artifactId>okhttp<!--> <version>3.4.1<!--> <!--> 
  • 1
  • 2
  • 3
  • 4
  • 5

GRADLE地址

compile 'com.squareup.okhttp3:okhttp:3.4.1' 
						
  • 1

实例

Get请求

package com.suning.okhttpdemo; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class GetUrlDemo { String run(String url) throws IOException { //由于本机设置了上网代理,因此OkHttp请求需要绑定代理 InetSocketAddress addr = new InetSocketAddress("10.19.110.55", 8080);
        Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
        OkHttpClient client = new OkHttpClient.
                Builder().proxy(proxy).build();     

        Request request = new Request.Builder()
            .url(url)
            .build(); try (Response response = client.newCall(request).execute()) { return response.body().string();
        }
      } public static void main(String[] args) throws IOException {
        GetUrlDemo demo = new GetUrlDemo();
        String reponse = demo.run("http://www.jd.com/");
        System.out.println(reponse);

    }
}
								
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

Post请求

package okhttp3.guide;

import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response; public class PostExample { public static final MediaType JSON
      = MediaType.parse("application/json; charset=utf-8");

  OkHttpClient client = new OkHttpClient(); String post(String url, String json) throws IOException {
    RequestBody body = RequestBody.create(JSON, json); Request request = new Request.Builder()
        .url(url)
        .post(body)
        .build();
    try (Response response = client.newCall(request).execute()) {
      return response.body().string();
    }
  } String bowlingJson(String player1, 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31541037/viewspace-2157018/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31541037/viewspace-2157018/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用 OkHttp3 发起 HTTP/2.0 POST 请求的 Java 代码: ```java import okhttp3.*; import java.io.IOException; public class Http2PostRequestExample { public static void main(String[] args) throws IOException { OkHttpClient client = new OkHttpClient(); // 构建 HTTP/2.0 的请求 Request request = new Request.Builder() .url("https://example.com/api") .post(RequestBody.create(MediaType.parse("application/json"), "{\"key\":\"value\"}")) .build(); // 发送请求 Response response = client.newCall(request).execute(); // 处理响应 if (response.isSuccessful()) { System.out.println(response.body().string()); } else { System.err.println("Unexpected response code: " + response); } } } ``` 这个例子中,我们使用 OkHttp3 的 `OkHttpClient` 类来创建 HTTP 客户端,然后构建一个 HTTP/2.0 的 POST 请求。在 `post()` 方法中,我们使用 `RequestBody.create()` 方法来创建一个请求体,并指定它的 MIME 类型为 `application/json`。最后,我们使用 `client.newCall(request).execute()` 方法来发送请求,并使用 `response.body().string()` 方法来获取响应内容。 需要注意的是,如果你要使用 HTTP/2.0 协议,你需要确保你的服务器端已经支持 HTTP/2.0。另外,OkHttp3 默认情况下会自动选择最佳的协议版本,如果你想强制使用 HTTP/2.0,可以在创建 `OkHttpClient` 对象时指定 `protocols()` 方法,如下所示: ```java OkHttpClient client = new OkHttpClient.Builder() .protocols(Arrays.asList(Protocol.HTTP_2, Protocol.HTTP_1_1)) .build(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值