הקדמה
כיתת ה־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
:
- צור אובייקט
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
כדי לשלוח בקשות 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
ולהדפיס את התגובה.
המשך ללמוד עם עוד מדריכי Java.