Java HttpURLConnection示例– Java HTTP请求GET,POST
java.net包中的HttpURLConnection类可用于以编程方式发送Java HTTP请求。
今天,我们将学习如何在Java程序中使用HttpURLConnection
发送GET和POST请求,然后打印响应。
Java HTTP请求
对于我们的HttpURLConnection示例,我正在使用Spring MVC教程中的示例项目,因为它具有GET和POST HTTP方法的URL。
以下是此Web应用程序的图像,我已将其部署在本地tomcat服务器上。
Java HTTP GET请求
Java HTTP GET登录页面请求
Java HTTP POST请求
对于Java HTTP GET请求,我们在浏览器URL本身中拥有所有信息。
因此,从以上图像中,我们知道我们具有以下GET请求URL。
- https://localhost:9090/SpringMVCExample /
- https://localhost:9090/SpringMVCExample /登录
上面的URL没有任何参数,但是我们知道在HTTP GET请求中,参数本身就是URL的一部分,因此,例如,如果我们必须发送一个名为userName且值为hyman的参数,那么这些URL就会像下面这样。
- https://localhost:9090/SpringMVCExample?userName = hyman
- https://localhost:9090/SpringMVCExample/login?userName = hyman&pwd = apple123 –用于多个参数
如果我们知道POST URL及其所需的参数,那么它很棒,但是在这种情况下,我们将从登录表单源中找出它。
下面是在任何浏览器中查看登录页面源代码时获得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>
如预期的那样,查看源代码中的form方法。
现在看到该操作是" home",因此POST URL将是https://localhost:9090/SpringMVCExample/home。
现在检查表格中的不同元素,从上面的表格中我们可以推断出我们需要发送一个名称为userName且类型为String的POST参数。
因此,现在我们已经完整了解了GET和POST请求,并且可以继续进行Java HTTP Request示例程序。
下面是使用HttpURLConnection
类发送Java HTTP请求所需遵循的步骤。
从GET/POST URL字符串创建URL对象。
在返回" HttpURLConnection"实例的URL对象上调用openConnection()方法
在" HttpURLConnection"实例中设置请求方法,默认值为GET。
在
HttpURLConnection
实例上调用setRequestProperty()方法来设置请求标头值,例如" User-Agent"和" Accept-Language"等。我们可以调用
getResponseCode()
来获取响应的HTTP代码。
这样,我们就知道请求是否已成功处理,或者是否抛出任何HTTP错误消息。对于GET,我们可以简单地使用Reader和InputStream读取响应并进行相应处理。
对于POST,在读取响应之前,我们需要从HttpURLConnection实例获取OutputStream并将POST参数写入其中。
HttpURLConnection示例
基于上述步骤,以下是示例程序,该示例程序显示了使用HttpURLConnection来发送Java GET和POST请求。
HttpURLConnectionExample.java代码:
package com.theitroad.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_PA内存S = "userName=hyman"; 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) { //success BufferedReader in = new BufferedReader(new InputStreamReader( con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); //print result System.out.println(response.toString()); } else { System.out.println("GET request not worked"); } } 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); //For POST only - START con.setDoOutput(true); OutputStream os = con.getOutputStream(); os.write(POST_PA内存S.getBytes()); os.flush(); os.close(); //For POST only - END int responseCode = con.getResponseCode(); System.out.println("POST Response Code :: " + responseCode); if (responseCode == HttpURLConnection.HTTP_OK) { //success BufferedReader in = new BufferedReader(new InputStreamReader( con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); //print result System.out.println(response.toString()); } else { System.out.println("POST request not worked"); } } }
当我们执行上面的程序时,我们得到下面的响应。
GET Response Code :: 200 <html><head> <title>Home</title></head><body><h1> Hello world! </h1><P> The time on the server is March 6, 2014 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 hyman</h3></body></html> POST DONE
只需将其与浏览器的HTTP响应进行比较,就会发现它是相同的。
您还可以将响应保存到任何HTML文件中,然后将其打开以直观地比较响应。