عميل HTTP لجافا: نظرة عامة على أفضل المكتبات (Java 11، Apache، OkHttp، Retrofit)

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

عميل HTTP لجافا: نظرة عامة على أفضل المكتبات

في تطوير جافا الحديث، لا يكاد أي تطبيق يستغني عن التفاعل عبر بروتوكول HTTP. إرسال الطلبات إلى REST API، تحميل الملفات، العمل مع الخدمات المصغرة — كل هذا يتطلب عميل HTTP موثوقًا وسهل الاستخدام. في هذه المقالة، سنستعرض أربع مكتبات الأكثر شيوعًا للعمل مع HTTP في جافا: HttpClient القياسي (Java 11+) وApache HttpClient وOkHttp وRetrofit. ستتعرف على ميزاتها ونقاط قوتها وستحصل على أمثلة عملية للكود.



1. Java 11 HttpClient (java.net.http)

بدءًا من Java 11، تمت إضافة عميل HTTP حديث إلى المكتبة القياسية، والذي يهدف إلى استبدال HttpURLConnection القديم. وهو يدعم HTTP/2 وWebSocket والطلبات غير المتزامنة والتيارات التفاعلية.

المزايا:

  • لا يتطلب تبعيات إضافية — مدمج في JDK.
  • دعم HTTP/2 والتحديث التلقائي للبروتوكول.
  • API مريح مع استدعاءات متزامنة وغير متزامنة.
  • دعم مدمج لمعالجة ملفات تعريف الارتباط وإعادة التوجيه والمصادقة.

مثال على طلب GET متزامن:

import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;

public class Java11HttpClientExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1")) .GET() .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println("Status code: " + response.statusCode()); System.out.println("Body: " + response.body()); }}

مثال على طلب POST غير متزامن:

import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.net.http.HttpRequest.BodyPublishers;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(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("Status: " + response.statusCode()); System.out.println("Body: " + response.body()); }).join(); }}


2. Apache HttpClient

مكتبة كلاسيكية من Apache، والتي كانت لفترة طويلة المعيار الفعلي. الإصدار الأخير (5.x) حصل على تحسينات كبيرة: دعم HTTP/2، تحسين معالجة تجمع الاتصالات، وتكوين أكثر مرونة.

المزايا:

  • أقصى مرونة وتعديل دقيق (مهلات، معترضات، تخزين مؤقت).
  • استقرار مثبت عبر الزمن.
  • دعم مخططات مصادقة مختلفة (Basic، Digest، NTLM).
  • تكامل جيد مع البروكسي وSSL.

مثال على طلب GET باستخدام Apache HttpClient 5:

import org.apache.hc.client5.http.classic.methods.HttpGet;import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;import org.apache.hc.client5.http.impl.classic.Clos                    

توصيات