【Java】发送HTTP GET和POST请求

本文讲解了GET和POST请求的区别,提供Java代码示例,并展示了如何在POST请求中处理JSON参数和解析返回的JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:GET和POST从代码上看几乎一样,只有两点区别,请求类型的值和入参的方式。别看代码一大堆,你需要注意的也就三四行代码,其他都是通用固定的代码。为什么我没有拆分两块来写,就是清晰表明两个请求方式代码的差异性,当然实际项目中需要创两个函数当成工具类给业务使用,其实也就是把下面代码复制两份改个名字。友情提醒:把下面代码注释都读一遍,其实你也就理解了这些代码的逻辑和意义了。

1、发起GET,POST请求主体代码

// 创建URL对象,如果是GET方式入参拼到url内
URL obj = new URL(url);
// 使用方法openConnection()返回一个URLConnection对象,表示应用程序和URL之间的通信链接。URLConnection向URL发送请求,并读取URL引用的资源
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// 设置请求类型,默认值GET,可选值POST
con.setRequestMethod("GET");
// 设置通用的请求属性,先不配等用到了再配置
con.setRequestProperty("accept", "*/*");
con.setRequestProperty("connection", "Keep-Alive");
con.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 设置超时时间,防止网络异常导致程序僵住
con.setConnectTimeout(3000);
// 设置是否从HttpUrlConnection输出,对于POST请求参数要放在http正文内,因此需要设为true,默认为false。
con.setDoOutput(true);
// 设置是否向HttpUrlConnection输入,将服务器端返回的数据存放在内,默认为true
con.setDoInput(true); 

/****** 如果是post请求,请将下面的(2)代码放入这里 *******/

// 使用方法connect建立实际的连接
con.connect();
// 得到响应状态码的返回值code,如果返回值正常,数据在网络中是以流的形式得到服务端返回的数据
int code = con.getResponseCode();

// 从流中读取响应信息,通用
String msg="";
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream())); // 编码utf-8,new InputStreamReader(InputStream,"utf-8")
String line = null;
while ((line = reader.readLine()) != null) { // 循环从流中读取
    msg += line + "\n";
}
reader.close(); // 关闭流
 
 // 断开连接,释放资源
con.disconnect();

2、POST请求的入参写法,两种方案任选其一

注意:下面入参为JSON序列化格式,例:"{\"appid\":\"value\"}"
// 写入参数到请求中,方案一
OutputStream out = con.getOutputStream();
out.write("入参".getBytes()); // 编码utf-8,getBytes("utf-8")
out.flush();
out.close();
// 写入参数到请求中,方案二
PrintWriter out = new PrintWriter(con.getOutputStream());
out.print("入参");
out.flush();
out.close();

3、知识点

1、如使用HttpURLConnection.getInputStream()方法的时系统会自动调用connect()方法
2、URLConnection 是 java.net 包中的一个抽象类,其主要用于实现应用程序与 URL 之间的通信。HttpURLConnection 继承自 URLConnection,也是抽象类。所以上面代码使用URLConnection接收obj.openConnection()也是可以的。
3、上面http请求返回的数据是json字符串,需要自己转成map对象方便使用,下面提供几个转换方法:

// 方法一
String jsonString = "{\"key1\":\"value1\",\"key2\":\"value2\"}";
Map<String, Object> map = new ObjectMapper().readValue(jsonString, new TypeReference<Map<String,Object>>(){});

// 方法二
String jsonString = "{\"key1\":\"value1\",\"key2\":\"value2\"}";
Map<String, Object> map = new Gson().fromJson(jsonString, new TypeToken<Map<String, Object>>(){}.getType());

// 方法三
String jsonString = "{\"key1\":\"value1\",\"key2\":\"value2\"}";
Map<String, Object> map = JSON.parseObject(jsonString, new TypeReference<Map<String, Object>>(){});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是程序仔—魏本全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值