您现在的位置是:java学习笔记 >
java学习笔记
Java中发送POST请求_3种方法代码详解
本 文 目 录
在Java中,发送POST请求主要有以下几种方法:
- 使用HttpURLConnection
- 使用HttpClient(Apache HttpClient库)
- 使用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();
:关闭响应。
- 上一篇
Java中表达二进制的方法(合计4种方法,欢迎补充)
首先,Java中表达二进制主要有以下几种方法:1. 使用Integer.toBinaryString()方法2. 使用Integer.toString(int i, int radix)方法3. 使用位运算符(如'&', '|', '^', '~', '', '>>>')4. 使用BigInteger类的toString(int radix)方法接下来我将为您详细解释这四种方法,并
- 下一篇
java ssh连接并发送命令_实测可用
首先,我需要澄清一下,SSH连接和发送命令在Java中通常使用第三方库如JSch来实现。根据我的理解,你可能想要了解如何使用JSch库进行SSH连接和发送命令的几种方法,并将它们进行对比。以下是四种常见的方法:1. 使用Session对象直接执行命令2. 使用ChannelExec对象执行命令3. 使用ChannelShell对象执行命令4. 使用ChannelSftp对象执行命令| 方法 | 描