مقدمة: لماذا URLConnection هو أمر لا بد منه لمطور Java
\n\nهل تساءلت يومًا كيف يتواصل متصفحك المفضل أو تطبيق الهاتف المحمول مع الخادم؟ السحر يكمن في طلبات HTTP البسيطة والقوية. وفي Java، هناك "سكين سويسري" خاص لذلك — الفئة java.net.URLConnection.
على الرغم من ظهور HttpClient المعياري الجديد في Java 11، إلا أن آلاف المطورين حول العالم ما زالوا يستخدمون URLConnection القديم الجيد. لماذا؟ أولاً، لأنه كود قديم (legacy) يحتاج إلى الصيانة. ثانيًا، إنه بسيط ولا يتطلب مكتبات خارجية. وثالثًا، فهم كيفية عمل طلبات HTTP على المستوى المنخفض يجعلك محترفًا حقيقيًا.
في هذه المقالة، لن نقوم فقط بنسخ إجابة من Stack Overflow. سنقوم بتحليل منهجين للعمل مع URLConnection ومقارنتهما بـ HttpClient الحديث. ستتعلم كيفية إرسال طلبات GET و POST، ومعالجة الأخطاء، وتعيين الرؤوس، وقراءة ردود الخادم. هيا بنا!
ما هو java.net.URLConnection ولماذا هو مطلوب؟
\n\nالفئة java.net.URLConnection هي فئة مجردة تمثل اتصالاً نشطًا بمورد محدد في URL. بكلمات بسيطة: إنها جسر بين تطبيق Java الخاص بك والخادم على الإنترنت. يمكنها:
- \n
- فتح اتصال بالخادم \n
- إرسال البيانات (GET, POST, PUT, DELETE) \n
- قراءة رد الخادم \n
- إدارة رؤوس الطلب والرد \n
- العمل مع ملفات تعريف الارتباط (cookies) \n
لكن هناك فارق بسيط: URLConnection لا يفعل شيئًا بنفسه. إنه يوفر الآلية فقط. كل السحر تقوم به فئاته الفرعية — على سبيل المثال، HttpURLConnection للعمل مع HTTP.
المنهج 1: الطريقة التقليدية مع HttpURLConnection (مختبرة عبر الزمن)
\n\nهذه الطريقة استخدمها آباؤنا المؤسسون لبرمجة Java. إنها موثوقة ولكنها تتطلب عملاً يدويًا. دعنا نحللها من خلال مثال طلب GET.
\n\nمثال 1: طلب GET مع معالجة الرد
\n\nimport java.io.BufferedReader;\nimport java.io.InputStreamReader;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\n\npublic class GetRequestExample {\n public static void main(String[] args) throws Exception {\n // 1. إنشاء كائن URL\n URL url = new URL("https://api.github.com/users/octocat");\n \n // 2. فتح الاتصال\n HttpURLConnection connection = (HttpURLConnection) url.openConnection();\n \n // 3. تكوين الطلب\n connection.setRequestMethod("GET");\n connection.setRequestProperty("User-Agent", "Mozilla/5.0");\n connection.setConnectTimeout(5000);\n connection.setReadTimeout(5000);\n \n // 4. التحقق من رمز الرد\n int responseCode = connection.getResponseCode();\n System.out.println("Response Code: " + responseCode);\n \n // 5. قراءة نص الرد\n if (responseCode == HttpURLConnection.HTTP_OK) {\n BufferedReader in = new BufferedReader(\n new InputStreamReader(connection.getInputStream()));\n String inputLine;\n StringBuilder response = new StringBuilder();\n \n while ((inputLine = in.readLine()) != null) {\n response.append(inputLine);\n }\n in.close();\n \n System.out.println("Response Body: " + response.toString());\n } else {\n System.out.println("GET request failed");\n }\n \n // 6. إغلاق الاتصال\n connection.disconnect();\n }\n}\n\n\nتحليل الكود:
\n- \n
setRequestMethod— يحدد أسلوب HTTP (GET, POST, PUT, DELETE) \n setRequestProperty— يعين الرؤوس (User-Agent, Content-Type، إلخ) \n المدونات
توصيات الكتب
اقرأ أيضًا