马士兵java架构师

您现在的位置是:java学习笔记 >

java学习笔记

Java中发送POST请求_3种方法代码详解

2023-11-30 15:16:05java学习笔记 本文浏览次数:1 百度已收录

本 文 目 录

在Java中,发送POST请求主要有以下几种方法:

  1. 使用HttpURLConnection
  2. 使用HttpClient(Apache HttpClient库)
  3. 使用OkHttp(Square公司的OkHttp库)

以下是这三种方法的对比表格:

方法 优点 缺点
HttpURLConnection 内置在JDK中,无需额外引入依赖 API设计较复杂,使用起来不够直观
HttpClient 功能强大,支持更多的HTTP特性 需要额外引入依赖,API设计较复杂
OkHttp 简单易用,性能优秀,支持现代HTTP特性 需要额外引入依赖

接下来是具体的代码实现和逐行解释:

使用HttpURLConnection

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpURLConnectionPost {
    public static void main(String[] args) throws Exception {
        URL url = new URL('http://example.com');
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod('POST');
        conn.setDoOutput(true);

        OutputStream os = conn.getOutputStream();
        os.write('key=value'.getBytes());
        os.flush();
        os.close();

        int responseCode = conn.getResponseCode();
        System.out.println('Response Code : ' + responseCode);

        conn.disconnect();
    }
}
# 代码运行结果
Response Code : 200
  • URL url = new URL('http://example.com');:创建一个URL对象,指定目标地址。
  • (HttpURLConnection) url.openConnection();:打开到此URL的连接,并返回一个HttpURLConnection实例。
  • conn.setRequestMethod('POST');:设置请求方法为POST。
  • conn.setDoOutput(true);:允许输出,用于发送POST数据。
  • OutputStream os = conn.getOutputStream();:获取输出流,用于写入POST数据。
  • os.write('key=value'.getBytes());:将POST数据写入输出流。
  • os.flush();:刷新输出流,确保所有数据都被发送出去。
  • os.close();:关闭输出流。
  • int responseCode = conn.getResponseCode();:获取响应码。
  • System.out.println('Response Code : ' + responseCode);:打印响应码。
  • conn.disconnect();:关闭连接。

使用HttpClient

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpClientPost {
    public static void main(String[] args) throws Exception {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost('http://example.com');

        StringEntity input = new StringEntity('key=value');
        input.setContentType('application/x-www-form-urlencoded');
        httpPost.setEntity(input);

        CloseableHttpResponse response = httpClient.execute(httpPost);
        try {
            System.out.println(response.getStatusLine());
            HttpEntity entity = response.getEntity();
            EntityUtils.consume(entity);
        } finally {
            response.close();
        }

        httpClient.close();
    }
}
  • CloseableHttpClient httpClient = HttpClients.createDefault();:创建一个默认的HttpClient实例。
  • HttpPost httpPost = new HttpPost('http://example.com');:创建一个HttpPost实例,指定目标地址。
  • StringEntity input = new StringEntity('key=value');:创建一个StringEntity实例,包含POST数据。
  • input.setContentType('application/x-www-form-urlencoded');:设置POST数据的Content-Type。
  • httpPost.setEntity(input);:将POST数据设置到HttpPost实例中。
  • CloseableHttpResponse response = httpClient.execute(httpPost);:执行POST请求,并获取响应。
  • response.getStatusLine();:获取响应状态行。
  • HttpEntity entity = response.getEntity();:获取响应实体。
  • EntityUtils.consume(entity);:消耗掉响应实体的内容。
  • response.close();:关闭响应。
  • httpClient.close();:关闭HttpClient。

使用OkHttp

import okhttp3.*;

public class OkHttpPost {
    public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient();

        MediaType mediaType = MediaType.parse('application/x-www-form-urlencoded');
        RequestBody body = RequestBody.create(mediaType, 'key=value');
        Request request = new Request.Builder()
                .url('http://example.com')
                .post(body)
                .build();

        Response response = client.newCall(request).execute();
        System.out.println(response.body().string());

        response.close();
    }
}
  • OkHttpClient client = new OkHttpClient();:创建一个OkHttpClient实例。
  • MediaType mediaType = MediaType.parse('application/x-www-form-urlencoded');:创建一个MediaType实例,表示POST数据的Content-Type。
  • RequestBody body = RequestBody.create(mediaType, 'key=value');:创建一个RequestBody实例,包含POST数据。
  • .url('http://example.com'):设置目标地址。
  • .post(body):设置请求方法为POST,并设置POST数据。
  • Request request = new Request.Builder().build();:构建一个Request实例。
  • Response response = client.newCall(request).execute();:执行POST请求,并获取响应。
  • response.body().string():获取响应体的内容。
  • response.close();:关闭响应。