איך להשתמש ב-Java HttpURLConnection עבור בקשות HTTP GET ו-POST

הקדמה

כיתת ה־HttpURLConnection מחבירת ה־java.net ניתן להשתמש בה כדי לשלוח בקשת HTTP של Java באופן תכנותי. במאמר זה, תלמד כיצד להשתמש ב־HttpURLConnection בתוכנית Java כדי לשלוח בקשות GET ו־POST ולהדפיס את התגובה.

דרישות מוקדמות

לדוגמה זו של HttpURLConnection, יש להשלים את מדריך Spring MVC משום שיש בו כתובות URL עבור שיטות HTTP של GET ו־POST.

שקול להשתמש בשרת Tomcat מקומי בפיתוח.

סיכום SpringMVCExample

בקשת HTTP GET ב־Java

  • localhost:8080/SpringMVCExample/

בקשת HTTP GET במטרה לדף התחברות

  • localhost:8080/SpringMVCExample/login

בקשת HTTP POST ב־Java

  • 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 כדי לשלוח בקשות 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 ולהדפיס את התגובה.

המשך ללמוד עם עוד מדריכי Java.

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