Java HttpURLConnection示例– Java HTTP请求GET,POST

时间:2020-02-23 14:36:37  来源:igfitidea点击:

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文件中,然后将其打开以直观地比较响应。