软件编程
位置:首页>> 软件编程>> java编程>> java发起http请求调用post与get接口的方法实例

java发起http请求调用post与get接口的方法实例

作者:GAo_ei  发布时间:2022-12-28 23:22:58 

标签:http请求,get,post

一、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();
}

来源:https://blog.csdn.net/G_Aoei/article/details/125168460

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com