Java HttpURLConnection教程:实现HTTP GET与POST请求

Java HttpURLConnection:HTTP GET与POST请求详解

本文是《如何使用Java HttpURLConnection进行HTTP GET和POST请求》系列文章的第一部分(共三部分)。

在Java中,java.net包下的HttpURLConnection类是用于以编程方式发送HTTP请求的关键工具。本文将深入讲解如何在Java程序中利用HttpURLConnection发送GET和POST请求,并处理其响应。

前置条件

为了更好地理解和实践本HttpURLConnection示例,建议您已完成Spring MVC教程,因为其中包含了用于GET和POST HTTP方法的URL。请确保将相关应用部署到本地的Tomcat服务器。

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>登录页面</title>
</head>
<body>
<form action="home" method="post">
<input type="text" name="userName"><br/>
<input type="submit" value="登录">
</form>
</body>
</html>
  • 请求方法为POST。
  • 表单的action属性指向home,即完整的URL为:localhost:8080/SpringMVCExample/home
  • userName输入框的类型为文本。

基于以上信息,您可以构造一个POST请求到:

localhost:8080/SpringMVCExample/home?userName=Pankaj

这将作为我们HttpURLConnection示例的基础。

HttpURLConnection示例

以下是使用HttpURLConnection类发送Java HTTP请求的步骤:

    1. 从GET或POST URL字符串中创建URL对象。

 

    1. 在URL对象上调用openConnection()方法,返回一个HttpURLConnection实例。

 

    1. 在HttpURLConnection实例中设置请求方法(默认值为GET)。

 

    1. 在HttpURLConnection实例上调用setRequestProperty()方法,设置请求头的值(如”User-Agent”、”Accept-Language”等)。

 

    1. 我们可以调用getResponseCode()来获取响应的HTTP代码。这样,我们就知道请求是否被成功处理,或者是否有任何HTTP错误消息被抛出。

 

    1. 对于GET请求,使用Reader和InputStream来读取响应并相应处理。

 

    对于POST请求,在代码处理响应之前,需要从HttpURLConnection实例中获取OutputStream,并将POST参数写入其中。

下面是一个使用HttpURLConnection发送Java GET和POST请求的示例程序。

HttpURLConnectionExample.java的示例

package com.scdev.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) { // 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 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);

		// For POST only - START
		con.setDoOutput(true);
		OutputStream os = con.getOutputStream();
		os.write(POST_PARAMS.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 did not work.");
		}
	}

}

编译并运行代码,将产生以下输出:

Output

这是文章《如何使用Java HttpURLConnection进行HTTP GET和POST请求》的第3部分(共3部分)。


GET 响应代码 :: 200
<html><head>
 <title>主页</title></head><body><h1> 你好世界! </h1><P> 服务器时间是 2015年3月6日 晚上9:31:04 IST。 </P></body></html>
GET 完成
POST 响应代码 :: 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>用户主页</title></head><body><h3>你好 Pankaj</h3></body></html>
POST 完成

将此输出与浏览器的HTTP响应进行比较。

如果你需要通过HTTPS协议发送GET和POST请求,那么你需要使用javax.net.ssl.HttpsURLConnection而不是java.net.HttpURLConnectionHttpsURLConnection会处理SSL握手和加密。

结论

在本文中,您学习了如何在Java程序中使用HttpURLConnection发送GET和POST请求,并打印出响应。

继续通过更多的Java教程来提高你的学习。

bannerAds