OkHttp-概述

文章目录

  • OkHttp
  • Get 请求
  • Post 请求
  • 使用场景
  • 版本
  • MockWebServer
  • GraalVM Native Image
  • 许可证书

OkHttp

HTTP 是现代应用程序联网交换数据和信息的主要方式。高效地使用HTTP不仅使您的内容加载更快,而且能节省带宽。
OkHttp是一个实现HTTP协议的客户端库,完美的支持如下特性:

  • 支持HTTP/2,允许对同一主机的所有请求共享一个套接字。
  • (即使HTTP/2不可用) 网络连接池也能减少请求的延迟
  • 完美支持GZIP压缩 下载功能
  • 支持网络缓存, 避免重复的网络请求

当网络信号不好的时候,OkHttp不会立刻返回请求错误,它会通过连接池进行多次请求。如果您的服务有多个IP地址,第一次连接失败,OkHttp将尝试替换IP地址,再次请求。这个特点对于拥有IPv4+IPv6和托管在冗余数据中心中的服务是非常友好的。OkHttp支持现代TLS功能(TLS 1.3、ALPN、Certificate Pinning)。你还可通过修改OkHttp的配置,来兼容之前的版本。

Get 请求

下面这段程序片段演示如何请求一个URL,并将其返回的内容打印为字符串

 OkHttpClient client = new OkHttpClient();

 String run(String url) throws IOException {

	  Request request = new Request.Builder()
	      .url(url)
	      .build();
	
	  try (Response response = client.newCall(request).execute()) {
	    return response.body().string();
	  }
}

Post 请求

下面这段程序片段演示如何向服务器提交数据。

public static final MediaType JSON
    = MediaType.get("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();
  }
}

更多的例子请参考OkHttp Recipes page

使用场景

OkHttp适用于Android 5.0+(API级别21+)和Java 8+
OkHttp通过Okio和Kotlin标准库实现高性能I/O。两者都是小型库,而且具有很强的向后兼容性。
我们强烈建议您像自动更新web浏览器一样,不断更新OkHttp 版本,使用Okhttp的最新版本,因为这是HTTPS客户端防止潜在安全问题的重要防御措施。We track 会动态跟踪TLS生态系统,并不断调整OkHttp以提高其连通性和安全性。

OkHttp实现了系统内置的TLS功能。在Java平台上,OkHttp还支持Conscrypt,Conscrypt集成了BoringSSL和Java 。OkHttp之所以支持Conscrypt,因为它是第一个安全提供商:

Security.insertProviderAt(Conscrypt.newProvider(), 1);

OkHttp 3.12.x分支支持Android 2.3+(API级别9+)和Java 7+。这些平台缺乏对TLS 1.2的支持,不建议使用。但由于升级很困难,我们将在2021 12月31日之前对3.12.x分支进行关键修复。

版本

历史版本请看 change log
最新的版本已经上传到 Maven Central

implementation("com.squareup.okhttp3:okhttp:4.10.0")

Snapshot ,R8 and ProGuard 也都能用.
另外,我们有一个可用的 bill of materials (BOM),它的作用是帮助您实时更新 OkHttp 版本进而保证OkHttp的兼容性.

    dependencies {
       // define a BOM and its version
       implementation(platform("com.squareup.okhttp3:okhttp-bom:4.10.0"))

       // define any required OkHttp artifacts without version
       implementation("com.squareup.okhttp3:okhttp")
       implementation("com.squareup.okhttp3:logging-interceptor")
    }

MockWebServer

OkHttp还有一个 HTTP, HTTPS, 和HTTP/2 测试库.

它最新的版本已经上传到 Maven Central.

testImplementation("com.squareup.okhttp3:mockwebserver:4.10.0")

GraalVM Native Image

使用Graal构建您的本地图像https://www.graalvm.org/是支持的。不过只有5.0.0-alpha .2 可以用,目前还没有发布最终版本。如果您进行了尝试,请积极提交您发现的任何错误或解决方法。

下面通过 okcurl 演示下如何编译.

$ ./gradlew okcurl:nativeImage
$ ./okcurl/build/graal/okcurl https://httpbin.org/get

许可证书

Copyright 2019 Square, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

英文原文

你可能感兴趣的:(Android开源框架,okhttp,android,网络)