java调用post与get接口
GAo_ei 人气:0一、java调用post接口
1、使用URLConnection或者HttpURLConnection
java自带的,无需下载其他jar包
URLConnection方式调用,如果接口响应码被服务端修改则无法接收到返回报文,只能当响应码正确时才能接收到返回
public static String sendPost(String url, String param) { OutputStreamWriter out = null; BufferedReader in = null; StringBuilder result = new StringBuilder(""); try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("Content-Type","application/json;charset=UTF-8"); conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); // 发送请求参数 out.write(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8")); String line; while ((line = in.readLine()) != null) { result.append(line); } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!"+e); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ if(out!=null){ try { out.close(); }catch(Exception ex){} } if(in!=null){ try { in.close(); }catch(Exception ex){} } } return result.toString(); }
HttpURLConnection方式调用
//ms超时毫秒,url地址,json入参 public static String httpJson(int ms,String url,String json) throws Exception{ String err = "00", line = null; StringBuilder sb = new StringBuilder(); HttpURLConnection conn = null; BufferedWriter out = null; BufferedReader in = null; try{ conn = (HttpURLConnection) (new URL(url.replaceAll("/","/"))).openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setConnectTimeout(ms); conn.setReadTimeout(ms); conn.setRequestProperty("Content-Type","application/json;charset=utf-8"); conn.connect(); out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(),"utf-8")); out.write(new String(json.getBytes(), "utf-8")); out.flush();//发送参数 int code = conn.getResponseCode(); if (conn.getResponseCode()==200){ in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8")); while ((line=in.readLine())!=null) sb.append(line); }//接收返回值 }catch(Exception ex){ err=ex.getMessage(); } try{ if (out!=null) out.close(); }catch(Exception ex){}; try{ if (in!=null) in.close(); }catch(Exception ex){}; try{ if (conn!=null) conn.disconnect();}catch(Exception ex){} if (!err.equals("00")) throw new Exception(err); return sb.toString(); }
2、使用CloseableHttpClient
使用的jar包
<dependency> <groupId>com.alibaba.csb.sdk</groupId> <artifactId>http-client</artifactId> <version>1.1.5.1</version> </dependency>
public static String httpPostJson(String url,String json) throws Exception{ String data=""; CloseableHttpClient httpClient = null; CloseableHttpResponse response = null; try { httpClient = HttpClients.createDefault(); HttpPost httppost = new HttpPost(url); httppost.setHeader("Content-Type", "application/json;charset=UTF-8"); StringEntity se = new StringEntity(json,Charset.forName("UTF-8")); se.setContentType("text/json"); se.setContentEncoding("UTF-8"); httppost.setEntity(se); response = httpClient.execute(httppost); int code = response.getStatusLine().getStatusCode(); System.out.println("接口响应码:"+code); data = EntityUtils.toString(response.getEntity(), "utf-8"); EntityUtils.consume(response.getEntity()); } catch (Exception e) { e.printStackTrace(); } finally { if(response!=null){ try{response.close();}catch (IOException e){} } if(httpClient!=null){ try{httpClient.close();}catch(IOException e){} } } return data; }
3、使用HttpCaller
使用的jar包同第2个中的jar包。
详情可以查看阿里云总线CSB
https://help.aliyun.com/document_detail/148571.html
public static String sendPost(){ String result = ""; HttpParameters.Builder builder = HttpParameters.newBuilder(); builder.requestURL("URL") // 设置请求的URL .api("api") // 设置服务名 .version("version") // 设置版本号 .method("post") // 设置调用方式, get/post .accessKey("ak").secretKey("sk"); // 设置accessKey 和 设置secretKey // 设置请求参数(json格式) Map<String,String> param = new HashMap<String,String>(); param.put("key1","value1"); param.put("key2","value2"); //加密,没有加密则不需要encryptParam,直接用param Map<String,String> encryptParam = new HashMap<String,String>(); encryptParam.put("key3", getData(JSON.toJSONString(param))); ContentBody cb = new ContentBody(JSON.toJSONString(encryptParam)); builder.contentBody(cb); try { result = HttpCaller.invoke(builder.build()); } catch (Exception e) { e.printStackTrace(); } return result; } //自己的加密方式 public static String getData(String data1){ return "加密后的密文"; }
二、java调用get接口
使用java自带的URLConnection
//将map型转为请求参数型 public static String getUrlData(Map<Object, Object> data) throws Exception{ StringBuffer sb = new StringBuffer(); try { Set<Map.Entry<Object, Object>> entries = data.entrySet(); Iterator<Map.Entry<Object, Object>> iterators = entries.iterator(); while(iterators.hasNext()){ Map.Entry<Object, Object> next = iterators.next(); sb.append(next.getKey().toString().trim()).append("=").append(URLEncoder.encode(next.getValue() + "", "UTF-8").trim()).append("&"); } sb.deleteCharAt(sb.length() - 1); } catch (Exception e) { sb.append(e.toString()); } return sb.toString(); } //strUrl截止到?,例:http://127.0.0.1:8080/api/method? public static String httpGet(String strUrl){ Map<Object, Object> params = new HashMap<Object, Object>(); params.put("key1", "value1"); params.put("key2", "value2"); String url=strUrl + getUrlData(params); StringBuilder result = new StringBuilder(); BufferedReader in = null; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 connection.connect(); // 获取所有响应头字段 // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8")); String line; while ((line = in.readLine()) != null) { result.append(line); } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } finally { if (in != null){ try { in.close(); }catch(Exception e2){} } } return result.toString(); }
总结
加载全部内容