عميل HTTP في Java: إجراء الطلبات بشكل صحيح

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

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

ابدأ الدورة

عميل HTTP في Java: إجراء الطلبات بشكل صحيح



في التطوير الحديث، تتفاعل أي تطبيق تقريبًا مع الخدمات الخارجية عبر HTTP. سواء كان REST API، أو تحميل البيانات من الخادم، أو إرسال النماذج - فإن القدرة على العمل مع طلبات HTTP هي مهارة إلزامية لمطور Java. في هذه المقالة، سنشرح كيفية إنشاء عميل HTTP في Java، باستخدام الوسائل القياسية والمكتبات الخارجية الشائعة. ستتعلم كيفية تنفيذ طلبات GET و POST بشكل صحيح، ومعالجة الأخطاء، وتحليل الردود.



1. النهج الكلاسيكي: HttpURLConnection



لفترة طويلة، كانت الطريقة القياسية للعمل مع HTTP في Java هي الفئة HttpURLConnection. وهي مضمنة في الحزمة java.net ولا تتطلب تثبيت تبعيات إضافية. لنلقِ نظرة على مثال لتنفيذ طلب GET:



import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;

public class SimpleHttpClient { public static void main(String[] args) throws Exception { URL url = new URL("https://api.example.com/data"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/json");

int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode);

if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder response = new StringBuilder();

while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println("Response: " + response.toString()); } else { System.out.println("GET request failed"); } connection.disconnect(); }}


بالنسبة لطلب POST مع إرسال بيانات JSON، سيكون الكود أكثر تعقيدًا قليلاً:



import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;

public class PostExample { public static void main(String[] args) throws Exception { URL url = new URL("https://api.example.com/users"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true);

String jsonInput = "{\\"name\\":\\"John\\",\\"email\\":\\"john@example.com\\"}";

try (OutputStream os = connection.getOutputStream()) { byte[] input = jsonInput.getBytes("utf-8"); os.write(input, 0, input.length); }

int responseCode = connection.getResponseCode(); System.out.println("POST Response Code: " + responseCode);

if (responseCode == HttpURLConnection.HTTP_CREATED) { // قراءة الرد مماثلة لـ GET } connection.disconnect(); }}


مزايا HttpURLConnection:

  • لا يتطلب مكتبات إضافية
  • تحكم كامل في الطلب
  • دعم جميع طرق HTTP


العيوب:

  • API مطول وغير مريح
  • صعوبة في معالجة الأخطاء
  • لا يوجد دعم مدمج للبروتوكولات الحديثة (HTTP/2)


2. المعيار الحديث: HttpClient (Java 11+)



بدءًا من Java 11، تمت إضافة java.net.http.HttpClient جديد إلى المكتبة القياسية. يوفر API حديثًا وغير متزامن وأكثر راحة بكثير. إليك كيف يبدو طلب GET باستخدامه:



import java.net.URI;import java.net.http.HttpClient;import java.net.ht                

المدونات

توصيات الكتب