Skip to main content

okhttp3-5-x

OkHttp 5.x HTTP client for Java/JVM 8+ and Android 5+. Use when making HTTP/HTTPS requests, building REST API clients, implementing connection pooling, response caching, request/response interceptors, certificate pinning, event monitoring, WebSocket connections, SSE consumption, or configuring TLS/cipher suites. Covers OkHttp 5.4.0 with HTTP/2, transparent GZIP, Fast Fallback (Happy Eyeballs), MockWebServer for testing, and GraalVM Native Image support.

설치로 이동

소스 정보

저장소
full-stack-skills/java-skills
최근 소스 활동
2026년 6월 16일 03:48
감지된 SKILL.md 언어
영어
스타
5
포크
3

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
14 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
okhttp3-5.x
description
OkHttp 5.x HTTP client for Java/JVM 8+ and Android 5+. Use when making HTTP/HTTPS requests, building REST API clients, implementing connection pooling, response caching, request/response interceptors, certificate pinning, event monitoring, WebSocket connections, SSE consumption, or configuring TLS/cipher suites. Covers OkHttp 5.4.0 with HTTP/2, transparent GZIP, Fast Fallback (Happy Eyeballs), MockWebServer for testing, and GraalVM Native Image support.
# OkHttp 5.x Reference (v5.4.0) OkHttp is an efficient HTTP client by default: HTTP/2 support, connection pooling, transparent GZIP, and response caching. It silently recovers from common connection problems and attempts alternate addresses when the first connect fails. ## Official Documentation Sources All authoritative information is on the official OkHttp site: | Topic | URL | |-------|-----| | **Overview** | https://square.github.io/okhttp/ | | **Calls** | https://square.github.io/okhttp/features/calls/ | | **Caching** | https://square.github.io/okhttp/features/caching/ | | **Connections** | https://square.github.io/okhttp/features/connections/ | | **Events** | https://square.github.io/okhttp/features/events/ | | **HTTPS** | https://square.github.io/okhttp/features/https/ | | **Interceptors** | https://square.github.io/okhttp/features/interceptors/ | | **Recipes** | https://square.github.io/okhttp/recipes/ | | **Security** | https://square.github.io/okhttp/security/ | | **API Javadoc** | https://square.github.io/okhttp/5.x/okhttp/okhttp3/ | | **MockWebServer** | https://square.github.io/okhttp/mockwebserver/ | | **5.x Change Log** | https://square.github.io/okhttp/changelogs/changelog/ | | **Maven Central** | https://central.sonatype.com/artifact/com.squareup.okhttp3/okhttp | | **GitHub** | https://github.com/square/okhttp | **RFC Standards followed by OkHttp:** - HTTP Semantics — RFC 9110 - HTTP Caching — RFC 9111 - HTTP/1.1 — RFC 9112 - HTTP/2 — RFC 9113 - WebSockets — RFC 6455 - SSE — Server-sent events - Happy Eyeballs — RFC 6555 ## Capability Boundaries ### ✅ Strong Suits 1. HTTP/2 support — all requests to the same host share a socket 2. Connection pooling — reduces latency, automatic reuse 3. Transparent GZIP — shrinks download sizes automatically 4. Response caching — avoids network for repeat requests 5. Interceptors — monitor, rewrite, and retry calls (Application + Network layers) 6. Fast Fallback (Happy Eyeballs RFC 6555) — concurrent IPv4/IPv6 connection attempts 7. TLS 1.3, ALPN, certificate pinning 8. EventListener API — capture metrics on HTTP calls 9. MockWebServer — test HTTP/HTTPS/HTTP/2 clients 10. GraalVM Native Image support 11. Java 9 Modules support (5.2+) 12. BOM for dependency management ### ⚠️ Requirements 1. Java 8+ or Android 5.0+ (API level 21+) 2. Kotlin Multiplatform: Maven projects must use `okhttp-jvm` artifact (not `okhttp`) 3. Requires Okio and Kotlin stdlib (transitive dependencies) 4. For certificate pinning: server TLS admin coordination required ### ❌ Out of Scope (with alternatives) 1. GET with body — OkHttp does not allow GET with a body (use POST) 2. Custom cache implementations — Cache is not an interface (use interceptors for custom caching logic) 3. Highly invalid HTTP requests — OkHttp follows RFC strictly 4. Older Android (< 5.0) — use OkHttp 3.12.x branch for API 9+ 5. Older Java (< 8) — use OkHttp 3.12.x branch for Java 7+ **Should not use** OkHttp for: - GET requests with body (use POST instead) - Custom cache implementations (use interceptors) - Invalid HTTP requests (OkHttp follows RFC strictly) - Android < 5.0 (use OkHttp 3.12.x) - Java < 8 (use OkHttp 3.12.x) ## When to Use This Skill Use this skill when the user needs to: - Make HTTP/HTTPS requests in Java or Android - Build REST API clients with connection pooling - Implement response caching - Add request/response interceptors (logging, auth, compression) - Configure TLS versions and cipher suites - Pin certificates for security - Monitor HTTP call performance with EventListener - Test HTTP clients with MockWebServer - Handle redirects, retries, and authentication challenges - Use HTTP/2 multiplexing ## 5.x New Features (vs 4.x) **Key changes in OkHttp 5.x:** - **Kotlin Multiplatform** — Separate JVM and Android artifacts (`okhttp-jvm` for Maven) - **Happy Eyeballs (RFC 6555)** — Fast Fallback enabled by default; concurrent IPv4/IPv6 attempts - **MockWebServer 3** — New coordinate (`mockwebserver3`), no JUnit 4 dependency, immutable API - **GraalVM Native Image** — Automatic support; see `okcurl` module for example - **Java 9 Modules (JPMS)** — Proper `module-info.java` files (5.2+) - **Virtual Threads** — Java 21 virtual threads supported (uses Lock/Condition instead of synchronized) - **Interceptor superpowers (5.4)** — Interceptors can now override OkHttpClient.Builder settings - **Call tags (5.3)** — Attach application-specific metadata to Calls - **Zstd compression (5.2)** — `okhttp-zstd` module for Zstandard compression - **QUERY HTTP method (5.2)** — Support for QUERY method - **HTTP 101 responses (5.2)** — Response.socket for connection upgrades ## Quick Start **Gradle:** ```groovy dependencies { implementation(platform("com.squareup.okhttp3:okhttp-bom:5.4.0")) implementation("com.squareup.okhttp3:okhttp") implementation("com.squareup.okhttp3:logging-interceptor") } ``` **Maven (JVM — must use `okhttp-jvm`):** ```xml <dependencyManagement> <dependencies> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp-bom</artifactId> <version>5.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp-jvm</artifactId> </dependency> </dependencies> ``` **Minimal GET:** ```java OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url("https://api.example.com/users").build(); try (Response response = client.newCall(request).execute()) { System.out.println(response.body().string()); } ``` **Minimal POST JSON:** ```java RequestBody body = RequestBody.create("{\"name\":\"Alice\"}", MediaType.get("application/json")); Request request = new Request.Builder().url("https://api.example.com/users").post(body).build(); try (Response response = client.newCall(request).execute()) { System.out.println(response.body().string()); } ``` ## Workflow Step 1. **Confirm environment** — Check Java 8+ or Android 5+, choose Maven (`okhttp-jvm`) or Gradle (`okhttp`) Step 2. **Configure OkHttpClient** — Set timeouts, connection pool, cache, interceptors, TLS Step 3. **Build Request** — Set URL, method, headers, body Step 4. **Execute Call** — Synchronous (`execute()`) or asynchronous (`enqueue()`) Step 5. **Handle Response** — Check status, read body, handle errors ## Critical: OkHttpClient Configuration ```java OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .callTimeout(60, TimeUnit.SECONDS) // Entire call timeout .connectionPool(new ConnectionPool(5, 5, TimeUnit.MINUTES)) .cache(new Cache(new File("cache-dir"), 50L * 1024L * 1024L)) // 50 MiB .addInterceptor(new LoggingInterceptor()) // Application interceptor .addNetworkInterceptor(new NetworkInterceptor()) // Network interceptor .followRedirects(true) .followSslRedirects(true) .retryOnConnectionFailure(true) .build(); ``` **Key configuration options:** | Builder Method | Impact | Default | |---------------|--------|---------| | `connectTimeout(int, TimeUnit)` | TCP connection timeout | 10 seconds | | `readTimeout(int, TimeUnit)` | Socket read timeout | 10 seconds | | `writeTimeout(int, TimeUnit)` | Socket write timeout | 10 seconds | | `callTimeout(int, TimeUnit)` | Entire call timeout (all steps) | no limit | | `connectionPool(ConnectionPool)` | Connection pool settings | 5 idle, 5 min keepalive | | `cache(Cache)` | Response cache (off by default) | null | | `followRedirects(boolean)` | Follow HTTP redirects | true | | `followSslRedirects(boolean)` | Follow HTTPS↔HTTP redirects | true | | `retryOnConnectionFailure(boolean)` | Retry on stale connection | true | | `dns(Dns)` | Custom DNS resolver | System DNS | | `proxy(Proxy)` | Single proxy | null (direct) | | `proxySelector(ProxySelector)` | Per-request proxy selection | system default | | `authenticator(Authenticator)` | HTTP auth challenges | none | | `certificatePinner(CertificatePinner)` | Certificate pinning | none | | `sslSocketFactory(SSLSocketFactory, X509TrustManager)` | Custom TLS | platform default | | `connectionSpecs(List<ConnectionSpec>)` | TLS versions and cipher suites | MODERN_TLS | | `eventListenerFactory(EventListener.Factory)` | Event monitoring | none | See [references/configuration.md](references/configuration.md) for full reference. ## Critical: Making Requests **Request building:** ```java Request request = new Request.Builder() .url("https://api.example.com/users/1") .header("Authorization", "Bearer token123") .addHeader("Accept", "application/json") .get() .build(); ``` **POST with JSON body:** ```java RequestBody body = RequestBody.create(jsonString, MediaType.get("application/json")); Request request = new Request.Builder() .url("https://api.example.com/users") .post(body) .build(); ``` **POST with form data:** ```java RequestBody formBody = new FormBody.Builder() .add("username", "alice") .add("password", "secret") .build(); ``` **Multipart upload:** ```java RequestBody fileBody = RequestBody.create(new File("photo.jpg"), MediaType.get("image/jpeg")); RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("title", "My Photo") .addFormDataPart("photo", "photo.jpg", fileBody) .build(); ``` See [references/calls.md](references/calls.md) for PUT/DELETE, request/response lifecycle. ## Critical: Handling Responses **Synchronous:** ```java try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); String body = response.body().string(); int code = response.code(); String contentType = response.header("Content-Type"); } ``` **Asynchronous:** ```java client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); } @Override public void onResponse(Call call, Response response) throws IOException { try (ResponseBody body = response.body()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); System.out.println(body.string()); } } }); ``` See [references/calls.md](references/calls.md) for follow-ups, retries, Dispatcher. ## Critical: Interceptors **Application interceptor** — sees the original request, even for cached responses: ```java OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new LoggingInterceptor()) .build(); ``` **Network interceptor** — sees the actual network request (with OkHttp-added headers): ```java OkHttpClient client = new OkHttpClient.Builder() .addNetworkInterceptor(new LoggingInterceptor()) .build(); ``` **Logging interceptor (built-in):** ```java import okhttp3.logging.HttpLoggingInterceptor; HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); ``` See [references/interceptors.md](references/interceptors.md) for Application vs Network, GzipRequestInterceptor. ## Critical: Caching **Enable cache:** ```java OkHttpClient client = new OkHttpClient.Builder() .cache(new Cache(new File("cache-dir"), 50L * 1024L * 1024L)) // 50 MiB .build(); ``` **Cache events:** `CacheHit`, `CacheMiss`, `CacheConditionalHit` **Prune cache:** ```java cache.evictAll(); // Clear all Iterator<String> urlIterator = cache.urls(); while (urlIterator.hasNext()) { if (urlIterator.next().startsWith("https://api.example.com/")) urlIterator.remove(); } ```
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기