عميل HTTP لجافا: أفضل المكتبات للعمل مع HTTP
نادرًا ما تخلو تطبيقات جافا الحديثة من التفاعل مع الخوادم البعيدة عبر بروتوكول HTTP. سواء كان ذلك لاستدعاء REST API، أو تحميل الملفات، أو التكامل مع الخدمات المصغرة — يحتاج المطور إلى عميل HTTP موثوق وسهل الاستخدام. في هذه المقالة، سنستعرض ثلاث مكتبات رائدة لجافا: OkHttp، Apache HttpClient، و Java HttpClient المدمج (بدءًا من Java 11). ستتعرف على ميزاتها، وترى أمثلة على الكود، وتفهم أي مكتبة تختار لمشروعك.
1. Java HttpClient (مدمج، Java 11+)
بدءًا من Java 11، ظهر في المكتبة القياسية عميل HTTP حديث حل محل HttpURLConnection القديم. وهو يدعم HTTP/2، WebSocket، الطلبات غير المتزامنة، والتدفقات التفاعلية.
الميزات:
- لا يتطلب تبعيات إضافية — فهو جزء من JDK.
- دعم الاستدعاءات المتزامنة (
send) وغير المتزامنة (sendAsync). - العمل مع HTTP/2 والرجوع تلقائيًا إلى HTTP/1.1.
- دعم مدمج لـ WebSocket.
- عمل مريح مع جسم الطلب عبر
BodyPublishersوالاستجابة عبرBodyHandlers.
مثال: طلب GET
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;
public class JavaHttpClientExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.github.com/users/octocat")) .GET() .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println("الحالة: " + response.statusCode()); System.out.println("الجسم: " + response.body()); }}مثال: طلب POST غير متزامن
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.util.concurrent.CompletableFuture;
public class AsyncPostExample { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://jsonplaceholder.typicode.com/posts")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString("{\\"title\\":\\"foo\\",\\"body\\":\\"bar\\",\\"userId\\":1}")) .build();
CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, HttpResponse.BodyHandlers.ofString()); future.thenAccept(response -> { System.out.println("الحالة: " + response.statusCode()); System.out.println("الرد: " + response.body()); }).join(); }}2. OkHttp (Square)
OkHttp — واحدة من أشهر المكتبات لنظام Android وجافا. تشتهر بأدائها العالي، وإدارة الاتصالات التلقائية، ودعم HTTP/2 و SPDY. تُستخدم OkHttp داخل Retrofit و Picasso.
الميزات:
- دعم HTTP/2 وتعدد الإرسال التلقائي للطلبات.
- مجمع اتصالات مدمج وإعادة استخدام المقابس.
- معالجة شفافة لضغط GZip.
- دعم المعترضات (interceptors) لتسجيل الدخول، والمصادقة، وإعادة المحاولة.
- منشئو طلبات بسيطون وشبيهون بـ fluent.
الإضافة (Maven):
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.