Skip to content

OkHttp

HTTP是现代应用程序的网络方式。 这是一种我们交换数据和媒体的方式。 高效地执行HTTP可以让你的东西加载更快,节省带宽。

OkHttp是一个默认高效的HTTP客户端:

  • HTTP/2支持允许对同一主机的所有请求共享一个套接字。
  • 连接池减少了请求延迟(如果HTTP/2还不可用)。
  • 透明GZIP缩小下载尺寸。
  • 响应缓存完全避免重复请求的网络。

OkHttp在网络不稳定时仍能坚持正常工作: 它会从常见的连接问题中静默恢复。 如果你的服务有多个IP地址,如果第一次连接失败,OkHttp将尝试替代地址。 这对于IPv4 IPv6和托管在冗余数据中心的服务是必要的。 OkHttp支持现代的TLS功能(TLS 1.3、ALPN、certificate pinning)。 可以将其配置为回调以实现广泛的连接。

使用OkHttp很容易。 它的请求/响应API是以流式(fluent)Builders和不变性(immutability)为思想设计的。 它既支持同步阻塞调用,也支持带有回调的异步调用。

Get URL

该程序下载URL并将其内容打印为字符串。 Full source.

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到服务器

该程序将数据post到服务。 Full source.

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 level 21+)和Java 8+上运行。

OkHttp依赖于 Okio 的高性能I/O和 Kotlin标准库。 两者都是小型库,具有很强的向后兼容性。

我们强烈建议你随时更新OkHttp。 与web浏览器的自动更新一样,保持HTTPS客户端的最新状态是防御潜在安全问题的重要手段。 We track动态TLS生态系统并调整OkHttp以提高连接性和安全性。

OkHttp使用你平台内置的TLS实现。 在Java平台上,OkHttp还支持将BoringSSL与Java集成在一起的[Conscillit][Conscillit]。 如果Conscrypt是第一个安全提供程序,OkHttp将使用它:

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 branch

发行版

我们的change log有发布历史。

Maven Central 上提供了最新版本 。

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

available是快照构建。 R8 and ProGuard 规则可用。

此外,我们还提供了bill of materials (BOM)来帮助你保持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本机映像

使用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.




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


有关特定语言的许可证下管理权限和限制,请参阅以下许可证。