المقدمة
يمكن استخدام فئة HttpURLConnection
من حزمة java.net
لإرسال طلب HTTP في Java برمجيًا. في هذا المقال، ستتعلم كيفية استخدام HttpURLConnection
في برنامج Java لإرسال طلبات GET
و POST
ومن ثم طباعة الاستجابة.
المتطلبات الأولية
لهذا المثال على HttpURLConnection
، يجب أن تكون قد أكملت دورة تعليمية Spring MVC لأنها تحتوي على عناوين URL لأساليب HTTP GET
و POST
.
افتراض نشرها على خادم Tomcat محلي localhost
.
ملخص SpringMVCExample
طلب Java HTTP GET
localhost:8080/SpringMVCExample/
طلب Java HTTP GET لصفحة تسجيل الدخول
localhost:8080/SpringMVCExample/login
طلب Java HTTP POST
localhost:8080/SpringMVCExample?userName=Pankaj
localhost:8080/SpringMVCExample/login?userName=Pankaj&pwd=apple123
– للعديد من المعاملات
استخراج المعلمات من النموذج
صفحة تسجيل الدخول HTML تحتوي على النموذج التالي:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login Page</title>
</head>
<body>
<form action="home" method="post">
<input type="text" name="userName"><br>
<input type="submit" value="Login">
</form>
</body>
</html>
- الـ
method
هوPOST
. - الـ
action
هوhome
.localhost:8080/SpringMVCExample/home
userName
من النوعtext
.
يمكنك بناء طلب POST
إلى:
localhost:8080/SpringMVCExample/home?userName=Pankaj
سيكون هذا أساسًا لمثال HttpURLConnection
.
مثال على HttpURLConnection
فيما يلي الخطوات لإرسال طلبات HTTP في Java باستخدام فئة HttpURLConnection
:
- إنشاء كائن
URL
من سلسلة URL للطلبGET
أوPOST
. - استدعاء طريقة
openConnection()
على كائن URL الذي يعيد نموذجًا منHttpURLConnection
. - ضبط طريقة الطلب في مثيل HttpURLConnection (القيمة الافتراضية هي GET).
- اتصل بطريقة setRequestProperty() على مثيل HttpURLConnection لتعيين قيم رأس الطلب (مثل “User-Agent”، “Accept-Language”، إلخ).
- يمكننا استدعاء getResponseCode() للحصول على رمز الاستجابة HTTP. بهذه الطريقة، نعرف ما إذا تم معالجة الطلب بنجاح أم إذا كان هناك أي رسالة خطأ HTTP ملقاة.
- بالنسبة لطريقة GET، استخدم Reader و InputStream لقراءة الاستجابة ومعالجتها وفقًا لذلك.
- بالنسبة لطريقة POST، قبل أن يتعامل الكود مع الاستجابة، يحتاج إلى الحصول على OutputStream من مثيل HttpURLConnection وكتابة معلمات POST فيها.
إليك برنامج مثالي يستخدم HttpURLConnection لإرسال طلبات Java GET و POST:
package com.journaldev.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpURLConnectionExample {
private static final String USER_AGENT = "Mozilla/5.0";
private static final String GET_URL = "https://localhost:9090/SpringMVCExample";
private static final String POST_URL = "https://localhost:9090/SpringMVCExample/home";
private static final String POST_PARAMS = "userName=Pankaj";
public static void main(String[] args) throws IOException {
sendGET();
System.out.println("GET DONE");
sendPOST();
System.out.println("POST DONE");
}
private static void sendGET() throws IOException {
URL obj = new URL(GET_URL);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", USER_AGENT);
int responseCode = con.getResponseCode();
System.out.println("GET Response Code :: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // نجاح
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// طباعة النتيجة
System.out.println(response.toString());
} else {
System.out.println("GET request did not work.");
}
}
private static void sendPOST() throws IOException {
URL obj = new URL(POST_URL);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
// بالنسبة لطريقة POST فقط - البداية
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
os.write(POST_PARAMS.getBytes());
os.flush();
os.close();
// بالنسبة لطريقة POST فقط - النهاية
int responseCode = con.getResponseCode();
System.out.println("POST Response Code :: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // نجاح
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// طباعة النتيجة
System.out.println(response.toString());
} else {
System.out.println("POST request did not work.");
}
}
}
قم بتجميع الكود وتشغيله. سينتج الإخراج التالي:
OutputGET Response Code :: 200
<html><head> <title>Home</title></head><body><h1> Hello world! </h1><P> The time on the server is March 6, 2015 9:31:04 PM IST. </P></body></html>
GET DONE
POST Response Code :: 200
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>User Home Page</title></head><body><h3>Hi Pankaj</h3></body></html>
POST DONE
قارن هذا الإخراج برد HTTP المتصفح.
إذا كنت بحاجة إلى إرسال طلبات GET
و POST
عبر بروتوكول HTTPS، فعليك استخدام javax.net.ssl.HttpsURLConnection
بدلاً من java.net.HttpURLConnection
. HttpsURLConnection
سيتعامل مع عملية مصافحة SSL والتشفير.
استنتاج
في هذا المقال، تعلمت كيفية استخدام HttpURLConnection
في برنامج Java لإرسال طلبات GET
و POST
ثم طباعة الاستجابة.
واصل تعلمك مع المزيد من الدروس التعليمية في جافا.