java-HttpURLConnection 发送POST请求 传递参数或JSON数据
java-HttpURLConnection 发送POST请求传递参数或JSON数据需求 三方接口restful请求POST方式参数JSON接收数据JSONHttpURLConnection发送POST请求public class RestUtil {public String postMethod(String url,String param){// 结果值StringBuffer rest=
·
java-HttpURLConnection 发送POST请求 传递参数或JSON数据
需求 三方接口 restful请求 POST方式 参数JSON 接收数据JSON
HttpURLConnection发送POST请求
public class RestUtil {
public String postMethod(String url,String param){
// 结果值
StringBuffer rest=new StringBuffer();
HttpURLConnection conn=null;
OutputStream out=null;
BufferedReader br=null;
try {
// 创建 URL
URL restUrl = new URL(url);
// 打开连接
conn= (HttpURLConnection) restUrl.openConnection();
// 设置请求方式为 POST
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection","keep-Alive");
// 设置接收文件类型
// conn.setRequestProperty("Accept","application/json");
//设置发送文件类型
/**
这里注意 传递JSON数据的话 就要设置
普通参数的话 就要注释掉
*/
conn.setRequestProperty("Content-Type","application/json");
// 输入 输出 都打开
conn.setDoOutput(true);
conn.setDoInput(true);
//开始连接
conn.connect();
// 传递参数 流的方式
out=conn.getOutputStream();
out.write(param.getBytes());
out.flush();
// 读取数据
br=new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
String line=null;
while (null != (line=br.readLine())){
rest.append(line);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
// 关闭所有通道
try {
if (br!=null) {
br.close();
}
if (out!=null) {
out.close();
}
if (conn!=null) {
conn.disconnect();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return rest.toString();
}
}
客户端请求
@GetMapping("/getData")
public String getData() {
RestUtil restUtil = new RestUtil();
String IP = "127.0.0.1";
String url = "http://" + IP + "/server/data";
String level = "0";
String dateTime = "2020-10";
// 参数
String param;
// 接收数据
String result;
/**
* 第一种 参数为JSON
* 要打开设置 conn.setRequestProperty("Content-Type","application/json");
*/
param = "{\"level\":\"" + level + "\",\"dateTime\":\"" + dateTime + "\"}";
result = restUtil.postMethod(url, param);
/**
* 第二种 直接传递参数
* 关闭 conn.setRequestProperty("Content-Type","application/json");
*/
StringBuffer dataBuffer = new StringBuffer();
try {
dataBuffer.append(URLEncoder.encode("level", "UTF-8"));
dataBuffer.append("=");
dataBuffer.append(URLEncoder.encode(level, "UTF-8"));
dataBuffer.append("&");
dataBuffer.append(URLEncoder.encode("dateTime", "UTF-8"));
dataBuffer.append("=");
dataBuffer.append(URLEncoder.encode(dateTime, "UTF-8"));
param = dataBuffer.toString();
result = restUtil.postMethod(url, param);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//接收的数据
System.out.println("result==" + result);
// 然后对 数据 进行 JSON解析
JSONObject jsonObject = JSON.parseObject(result);
String code = jsonObject.get("code") == null ? "" : jsonObject.get("code").toString();
String message = jsonObject.get("message") == null ? "" : jsonObject.get("message").toString();
dateTime = jsonObject.get("dateTime") == null ? "" : jsonObject.get("dateTime").toString();
JSONArray dataJsonArray = (JSONArray) jsonObject.get("data");
if (null != dataJsonArray && dataJsonArray.size() > 0) {
for (int i = 0; i < dataJsonArray.size(); i++) {
JSONObject data = (JSONObject) dataJsonArray.get(i);
String account = data.get("account") == null ? "" : data.get("account").toString();
String name = data.get("name") == null ? "" : data.get("name").toString();
System.out.println("code==" + code + "++message==" + message + "++dateTime==" + dateTime
+ "++account==" + account + "++name==" + name);
}
}
return "success";
}
服务端 如果接收为JSON数据的话 就要从流中取出数据
(2021/6/21新增->不建议这种方法,直接参数加注解 @RequestBody)
//读取流中的json数据
BufferedReader br=null;
StringBuffer result=null;
try {
br=new BufferedReader(new InputStreamReader(request.getInputStream(),"utf-8"));
String line=null;
while (null!=(line=br.readLine())){
result.append(line);
}
System.out.println("接收参数:"+result.toString());
} catch (Exception e) {
e.printStackTrace();
}
服务端 如果是普通参数的话 直接获取
/**
* 如果是参数的方式
*/
String level = request.getParameter("level");
String dateTime = request.getParameter("dateTime");
服务端返回JSON数据
return "{\"code\":\"100001\",\"message\":\"请求成功\",\"dateTime\":\"2020-10\"," +
"\"data\":[{\"account\":\"zhangsan\",\"name\":\"张三\"}," +
"{\"account\":\"lisi\",\"name\":\"李四\"}," +
"{\"account\":\"wangwu\",\"name\":\"王五\"}," +
"{\"account\":\"xiaoliu\",\"name\":\"小六\"}]}";
推荐使用第三方库
这里使用的是 hutool , 很方便
public static void main(String[] args) {
// hutool
// get 请求
String getRequestStringUrl = "http://localhost:8080/getRequest?id=1";
HttpRequest.get(getRequestStringUrl).timeout(5 * 60 * 1000).execute();
// post 请求 传递json参数
String postRequestStringUrl = "http://localhost:8080/postRequest";
// 参数
JSONObject jsonObject = new JSONObject();
jsonObject.put("data","123");
jsonObject.put("email","123456@163.com");
// 设置请求头
Map<String, String > heads = new HashMap<>();
heads.put("Content-Type", "application/json;charset=UTF-8");
// 纯请求 要结果的话 最后加 .body()
HttpRequest.post(postRequestStringUrl) // url
.headerMap(heads, false) // 请求头设置
.body(jsonObject.toJSONString()) // json参数
.timeout(5 * 60 * 1000) // 超时
.execute(); // 请求
// .body(); // 返回值
}
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)