JAVA发送POST请求带参数详解

发布时间:2023-05-21

在Web开发中,我们通常需要向服务器提交数据,这时候就需要使用HTTP请求。其中,POST请求是提交数据的一种常见方式。在JAVA中,我们可以使用HttpURLConnection类来发送POST请求并携带参数,本文将从几个方面对JAVA发送POST请求带参数做详细的阐述。

一、JAVA发送POST请求

在JAVA中发送POST请求需要用到HttpURLConnection类,可以通过该类来建立一个HTTP连接,并发送POST请求、接收响应。 请求示例代码:

public static String sendPost(String url, String param) throws Exception {
   URL obj = new URL(url);
   HttpURLConnection con = (HttpURLConnection) obj.openConnection();
   con.setRequestMethod("POST");
   con.setRequestProperty("User-Agent", "Mozilla/5.0");
   con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
   String urlParameters = param;
   con.setDoOutput(true);
   DataOutputStream wr = new DataOutputStream(con.getOutputStream());
   wr.writeBytes(urlParameters);
   wr.flush();
   wr.close();
   BufferedReader in = new BufferedReader(
           new InputStreamReader(con.getInputStream()));
   String inputLine;
   StringBuffer response = new StringBuffer();
   while ((inputLine = in.readLine()) != null) {
       response.append(inputLine);
   }
   in.close();
   return response.toString();
}

上面的代码使用URLHttpURLConnection来发送POST请求,并返回服务器的响应结果。下面将详细解释每一行代码的作用:

  1. URL obj = new URL(url); 创建一个URL对象,用于指定要连接的URL地址。
  2. HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 打开连接。通过URL.openConnection()方法获取到HttpURLConnection对象后,需要将其强制类型转换为HttpURLConnection类型,以便使用更多的HTTP协议相关API。
  3. con.setRequestMethod("POST"); 设置HTTP请求的方法为POST,这里还可以使用GET、PUT、DELETE等其他请求方式。
  4. con.setRequestProperty("User-Agent", "Mozilla/5.0"); 设置HTTP请求头中的属性,这里将User-Agent设置为Mozilla/5.0,可以伪装成浏览器请求。还可以设置其他请求头属性,如AcceptContent-Type等。
  5. String urlParameters = param; 设置POST请求参数,这里使用String类型参数,根据需要可以使用其他类型的参数。
  6. con.setDoOutput(true); 设置该请求是输出数据,用于POST请求的参数传递。
  7. DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 创建DataOutputStream对象,用于向服务器写入POST参数。
  8. wr.writeBytes(urlParameters); 向服务器写入POST参数。
  9. wr.flush(); 刷新输出流,确保所有信息被写入。
  10. wr.close(); 关闭输出流,释放资源。
  11. BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 创建BufferedReader对象,用于读取服务器的响应信息。
  12. String inputLine; 定义用于存储读取服务器响应数据的变量。
  13. StringBuffer response = new StringBuffer(); 创建StringBuffer对象,用于存储服务器响应数据。
  14. while ((inputLine = in.readLine()) != null) {response.append(inputLine);} 循环读取服务器响应的每一行数据,并将其添加到StringBuffer对象中。
  15. in.close(); 关闭BufferedReader对象,释放资源。
  16. return response.toString(); 返回服务器响应数据。

二、JAVA POST请求设置请求头

在JAVA发送POST请求时,可以设置HTTP请求头,在请求头中添加一些需要的属性或信息。 请求示例代码:

public static String sendPost(String url, String param, Map<String, String> headers) throws Exception {
   URL obj = new URL(url);
   HttpURLConnection con = (HttpURLConnection) obj.openConnection();
   con.setRequestMethod("POST");
   con.setRequestProperty("User-Agent", "Mozilla/5.0");
   con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
   for (Map.Entry<String, String> entry : headers.entrySet()) {
       con.setRequestProperty(entry.getKey(), entry.getValue());
   }
   String urlParameters = param;
   con.setDoOutput(true);
   DataOutputStream wr = new DataOutputStream(con.getOutputStream());
   wr.writeBytes(urlParameters);
   wr.flush();
   wr.close();
   BufferedReader in = new BufferedReader(
           new InputStreamReader(con.getInputStream()));
   String inputLine;
   StringBuffer response = new StringBuffer();
   while ((inputLine = in.readLine()) != null) {
       response.append(inputLine);
   }
   in.close();
   return response.toString();
}

上面的示例代码在发送POST请求时,添加了headers参数用于设置HTTP请求头,其中headers是一个Map结构,用于存储HTTP请求所需要的其他头部信息。这样就可以在发送HTTP请求时自定义请求头,实现更加灵活的控制。

三、JAVA发送HTTP请求

JAVA发送HTTP请求的方式不止一种,常用的方式还包括HttpClientOkHttp两种框架。HttpClient是Apache的一个HTTP客户端库,OkHttp是一个高效的HTTP客户端,性能优秀,同时支持HTTP/2协议,并支持Android平台。

四、小结

本文从JAVA发送POST请求、JAVA POST请求设置请求头、JAVA发送HTTP请求三个方面对JAVA发送POST请求带参数做了详细的阐述,对于需要发送HTTP请求的开发人员可以根据实际需要选择适合自己的方式。Java中发送HTTP请求的方式也是非常多的,需要根据自己的需求选择不同的方式。最后,本文提供了详细的代码示例,开发人员可以根据代码示例进行开发,提升开发效率。