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

Posted 皖南笑笑生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了译文——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</groupId>
  <artifactId>okhttp</artifactId>
  <version>3.4.1</version>
</dependency>

GRADLE地址

compile 'com.squareup.okhttp3:okhttp:3.4.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);

    

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, String player2) 
    return "'winCondition':'HIGH_SCORE',"
        + "'name':'Bowling',"
        + "'round':4,"
        + "'lastSaved':1367702411696,"
        + "'dateStarted':1367702378785,"
        + "'players':["
        + "'name':'" + player1 + "','history':[10,8,6,7,8],'color':-13388315,'total':39,"
        + "'name':'" + player2 + "','history':[6,10,5,10,10],'color':-48060,'total':41"
        + "]";
  

  public static void main(String[] args) throws IOException 
    PostExample example = new PostExample();
    String json = example.bowlingJson("Jesse", "Jake");
    String response = example.post("http://www.roundsapp.com/post", json);
    System.out.println(response);
  

以上是关于译文——OkHttp, 安卓和Java应用的HTTP&HTTP2.0客户端的主要内容,如果未能解决你的问题,请参考以下文章

高效地配置okhttp

安卓网络请求之——OkHttp学习

SpringBoot Java后端实现okhttp3超时设置

安卓 okhttp小结

深入浅出安卓热门网络框架 OKHttp3 和 Retrofit 原理

Android:安卓学习笔记之OkHttp原理的简单理解和使用