كيفية استخدام Java HttpURLConnection لطلبات HTTP GET و POST

المقدمة

يمكن استخدام فئة 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:

  1. إنشاء كائن URL من سلسلة URL للطلب GET أو POST.
  2. استدعاء طريقة openConnection() على كائن URL الذي يعيد نموذجًا من HttpURLConnection.
  3. ضبط طريقة الطلب في مثيل HttpURLConnection (القيمة الافتراضية هي GET).
  4. اتصل بطريقة setRequestProperty() على مثيل HttpURLConnection لتعيين قيم رأس الطلب (مثل “User-Agent”، “Accept-Language”، إلخ).
  5. يمكننا استدعاء getResponseCode() للحصول على رمز الاستجابة HTTP. بهذه الطريقة، نعرف ما إذا تم معالجة الطلب بنجاح أم إذا كان هناك أي رسالة خطأ HTTP ملقاة.
  6. بالنسبة لطريقة GET، استخدم Reader و InputStream لقراءة الاستجابة ومعالجتها وفقًا لذلك.
  7. بالنسبة لطريقة POST، قبل أن يتعامل الكود مع الاستجابة، يحتاج إلى الحصول على OutputStream من مثيل HttpURLConnection وكتابة معلمات POST فيها.

إليك برنامج مثالي يستخدم HttpURLConnection لإرسال طلبات Java GET و POST:

HttpURLConnectionExample.java
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.");
		}
	}

}

قم بتجميع الكود وتشغيله. سينتج الإخراج التالي:

Output
GET 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 ثم طباعة الاستجابة.

واصل تعلمك مع المزيد من الدروس التعليمية في جافا.

Source:
https://www.digitalocean.com/community/tutorials/java-httpurlconnection-example-java-http-request-get-post