最近,公司需求与外界业务对接,由于某些情况需要使用java模拟curl方式进行http请求。
curl发送后会直接打印下游返回的报文,但是业务需要判断状态码时候就不方便了,需要自己封装下。
获取curl状态码可以使用-w参数解决,但是这样返回值会与下游返回的报文拼接在一起,如下图:
这不是标准的json形式,java也没法直接转为json形式,所以我们可以自行拼接实现。
param = param.replace(" ", "").replace("\n", "").replace("\t", "");
String header = "X-Auth-Token:" + map.get(HomeConstant.TOKEN);
ProcessBuilder pb;
if(null!=map.get(HomeConstant.TOKEN)){
String[] cmds = {curl, "-s", "-X", type, "--insecure", url, "-H", "Content-Type:application/json","-H",header, "-d", param,"-w",",\"code\":%{http_code}}"};
pb = new ProcessBuilder(cmds);
}else{
String[] cmds = {curl, "-s", "-X", type, "--insecure", url, "-H", "Content-Type:application/json", "-d", param,"-w",",\"code\":%{http_code}}"};
pb = new ProcessBuilder(cmds);
}
pb.redirectErrorStream(true);
Process p;
p = pb.start();
String line = null;
//在返回的报文前拼接json
StringBuffer str = new StringBuffer("{\"data\":");
br = new BufferedReader(new InputStreamReader(p.getInputStream(),"UTF-8"));
while ((line = br.readLine()) != null) {
str.append(line);
}
//将拼接完的json组装返回即可
return JSON.parseObject(str.toString());
这样就以取巧的方式,获取想要的其他信息,同时可查curl -w的参数列表填入自己想要的返回信息。如下图,为标准json