請參閱專案網站以取得文件和 API。
HTTP 是現代應用程式網路的方式。這就是我們交換資料和媒體的方式。有效地執行 HTTP 可以使您的內容載入速度更快並節省頻寬。
OkHttp 是一個預設高效的 HTTP 用戶端:
當網路出現問題時,OkHttp 會堅持不懈:它會默默地從常見的連接問題中恢復。如果您的服務有多個 IP 位址,OkHttp 將在第一次連線失敗時嘗試備用位址。這對於 IPv4+IPv6 和託管在冗餘資料中心的服務是必要的。 OkHttp 支援現代 TLS 功能(TLS 1.3、ALPN、憑證固定)。它可以配置為回退以實現廣泛的連接。
使用 OkHttp 很簡單。其請求/回應 API 的設計具有流暢的建構器和不變性。它支援同步阻塞調用和帶有回調的非同步調用。
OkHttp 遵循現代 HTTP 規範,例如
當規格不明確時,OkHttp 遵循現代用戶代理,例如流行的瀏覽器或常見的 HTTP 庫。
OkHttp 是有原則的,避免過度配置,特別是當這種配置是為了解決有問題的伺服器、測試無效場景或與相關 RFC 相矛盾時。其他 HTTP 庫可以填補這一空白,允許進行廣泛的定制,包括可能無效的請求。
範例限制
該程式下載 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 ();
}
}
該程式將資料發佈到服務。完整原始碼。
public static final MediaType JSON = MediaType . get ( "application/json" );
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 頁面上。
OkHttp 適用於 Android 5.0+(API 等級 21+)和 Java 8+。
OkHttp 依賴 Okio 來實現高效能 I/O 和 Kotlin 標準函式庫。兩者都是小型庫,具有很強的向後相容性。
我們強烈建議您保持 OkHttp 是最新的。與自動更新 Web 瀏覽器一樣,保持 HTTPS 用戶端最新狀態是防範潛在安全問題的重要手段。我們追蹤動態 TLS 生態系統並調整 OkHttp 以提高連接性和安全性。
OkHttp 使用您平台的內建 TLS 實作。在 Java 平台上,OkHttp 也支援 Conscrypt,它將 BoringSSL 與 Java 整合。如果 OkHttp 是第一個安全提供者,它將使用 Conscrypt:
Security . insertProviderAt ( Conscrypt . newProvider (), 1 );
OkHttp 3.12.x
分支支援 Android 2.3+(API 等級 9+)和 Java 7+。這些平台缺乏對 TLS 1.2 的支持,不應使用。
我們的變更日誌有發布歷史記錄。
最新版本可在 Maven Central 上取得。
implementation( " com.squareup.okhttp3:okhttp:4.12.0 " )
可以使用快照建置。 R8 和 ProGuard 規則可用。
此外,我們還提供物料清單 (BOM),幫助您保持 OkHttp 工件最新並確保版本相容性。
dependencies {
// define a BOM and its version
implementation(platform( " com.squareup.okhttp3:okhttp-bom:4.12.0 " ))
// define any required OkHttp artifacts without version
implementation( " com.squareup.okhttp3:okhttp " )
implementation( " com.squareup.okhttp3:logging-interceptor " )
}
OkHttp 包含一個用於測試 HTTP、HTTPS 和 HTTP/2 用戶端的函式庫。
最新版本可在 Maven Central 上取得。
testImplementation( " com.squareup.okhttp3:mockwebserver:4.12.0 " )
MockWebServer 首先用於內部測試,以及使用 OkHttp 用戶端對應用程式進行基本測試。它不是一個獨立開發的功能齊全的 HTTP 測試庫。它沒有被積極開發新功能。因此,您可能會發現您的需求超出了 MockWebServer 的範圍,並且您可能會使用功能更齊全的測試庫,例如 MockServer。
使用 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.