Java远程调用Restful API接口的Post和Get请求工具类

更多知识 学习:https://www.processon.com/view/60504b5ff346fb348a93b4fa#map

一、Post请求

       1、使用Post请求时,需要传递两个参数,第一个是请求url,第二个参数是请求参数;返回值是一个string,可以直接接收返回的参数,也可以使用工具转换成map格式;

              请求参数示例:String params = "systype=4&aa=123";

              请求url示例:String requestUrl = "http://10.205.0.133:9991/service/getSysUseInfo";

       2、代码示例

    /**
     * 向指定 URL 发送POST方法的请求
     * @param url 发送请求的 URL
     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return 所代表远程资源的响应结果
     */
    public static String sendPostHttpRequest(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            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);
            //1.获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            //2.中文有乱码的需要将PrintWriter改为如下
            //out=new OutputStreamWriter(conn.getOutputStream(),"UTF-8")
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!"+e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return result;
    }

3、请求完整示例,可使用main方法测试

// 接口地址
String requestUrl = "http://10.205.0.133:9991/service/getSysUseInfo";
String params = "systype=4&aa=123";
try {
	String map = sendPostHttpRequest(requestUrl, params);
	Map<String, Object> retMap = new HashMap<String, Object>();
	retMap = JSONObject.fromObject(map);
	System.out.println(retMap);
} catch (Exception e) {
	e.printStackTrace();
}

二、Get请求

1、使用get请求时,第一个参数为请求url,第二个参数为请求参数;

      请求参数示例:

Map<String, Object> datas = new HashMap<>();
datas.put("systype", 4);
datas.put("name", "lee");

     请求url示例:

String requestUrl = "http://10.205.0.13:8888/IMP/api/rest/web/processJobWeb/singleStepProcessJob";

2、代码示例

    /**
	 * java调用运程api公共方法
	 * 
	 * @param requestUrl
	 * @param params
	 * @return
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	static String httpRequest(String requestUrl, Map params) throws Exception {
		// buffer用于接受返回的字符
		StringBuffer buffer = new StringBuffer();

		// 建立URL,把请求地址给补全,其中urlencode()方法用于把params里的参数给取出来
		URL url = new URL(requestUrl + "?" + urlencode(params));
		// 打开http连接
		HttpURLConnection httpUrlConn = (HttpURLConnection) url
				.openConnection();
		httpUrlConn.setDoInput(true);
		httpUrlConn.setRequestMethod("GET");
		httpUrlConn.connect();

		// 获得输入
		InputStream inputStream = httpUrlConn.getInputStream();
		InputStreamReader inputStreamReader = new InputStreamReader(
				inputStream, "utf-8");
		BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

		// 将bufferReader的值给放到buffer里
		String str = null;
		while ((str = bufferedReader.readLine()) != null) {
			buffer.append(str);
		}
		// 关闭bufferReader和输入流
		bufferedReader.close();
		inputStreamReader.close();
		inputStream.close();
		inputStream = null;
		// 断开连接
		httpUrlConn.disconnect();

		// 返回字符串
		return buffer.toString();
	}
	
	/**
	 * 请求参数拼接(组装)
	 * @param data
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static String urlencode(Map<String, Object> data) {
		// 将map里的参数变成像 showapi_appid=###&showapi_sign=###&的样子
		StringBuilder sb = new StringBuilder();
		for (Map.Entry i : data.entrySet()) {
			try {
				sb.append(i.getKey()).append("=")
						.append(URLEncoder.encode(i.getValue() + "", "UTF-8"))
						.append("&");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
	}

3、请求完整示例,可使用main方法测试

// 启动流程接口地址
String requestUrl = "http://10.205.0.13:8888/IMP/api/rest/web/processJobWeb/singleStepProcessJob";
Map<String, Object> datas = new HashMap<>();
datas.put("systype", 4);
datas.put("name", "lee");

// 启动流程返回的数据
String ret_parms = HttpRestUtil.httpRequest(requestUrl, datas);
Map<String, Object> retMap = new HashMap<String, Object>();
retMap = JSONObject.fromObject(ret_parms);
System.out.println(retMap);

三、完整示例工具类

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Map;

/**
 * javay访问rest API工具类
 * 
 * @author zhaohailong
 *
 */
public class HttpRestUtil {

	/**
	 * java调用运程api公共方法
	 * 
	 * @param requestUrl
	 * @param params
	 * @return
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	static String httpRequest(String requestUrl, Map params) throws Exception {
		// buffer用于接受返回的字符
		StringBuffer buffer = new StringBuffer();

		// 建立URL,把请求地址给补全,其中urlencode()方法用于把params里的参数给取出来
		URL url = new URL(requestUrl + "?" + urlencode(params));
		// 打开http连接
		HttpURLConnection httpUrlConn = (HttpURLConnection) url
				.openConnection();
		httpUrlConn.setDoInput(true);
		httpUrlConn.setRequestMethod("GET");
		httpUrlConn.connect();

		// 获得输入
		InputStream inputStream = httpUrlConn.getInputStream();
		InputStreamReader inputStreamReader = new InputStreamReader(
				inputStream, "utf-8");
		BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

		// 将bufferReader的值给放到buffer里
		String str = null;
		while ((str = bufferedReader.readLine()) != null) {
			buffer.append(str);
		}
		// 关闭bufferReader和输入流
		bufferedReader.close();
		inputStreamReader.close();
		inputStream.close();
		inputStream = null;
		// 断开连接
		httpUrlConn.disconnect();

		// 返回字符串
		return buffer.toString();
	}

	/**
	 * 请求参数拼接(组装)
	 * 
	 * @param data
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static String urlencode(Map<String, Object> data) {
		// 将map里的参数变成像 showapi_appid=###&showapi_sign=###&的样子
		StringBuilder sb = new StringBuilder();
		for (Map.Entry i : data.entrySet()) {
			try {
				sb.append(i.getKey()).append("=")
						.append(URLEncoder.encode(i.getValue() + "", "UTF-8"))
						.append("&");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
	}

	/**
	 * 向指定 URL 发送POST方法的请求
	 * 
	 * @param url
	 *            发送请求的 URL
	 * @param param
	 *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
	 * @return 所代表远程资源的响应结果
	 */
	public static String sendPostHttpRequest(String url, String param) {
		PrintWriter out = null;
		BufferedReader in = null;
		String result = "";
		try {
			URL realUrl = new URL(url);
			// 打开和URL之间的连接
			URLConnection conn = realUrl.openConnection();
			// 设置通用的请求属性
			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);
			// 1.获取URLConnection对象对应的输出流
			out = new PrintWriter(conn.getOutputStream());
			// 2.中文有乱码的需要将PrintWriter改为如下
			// out=new OutputStreamWriter(conn.getOutputStream(),"UTF-8")
			// 发送请求参数
			out.print(param);
			// flush输出流的缓冲
			out.flush();
			// 定义BufferedReader输入流来读取URL的响应
			in = new BufferedReader(
					new InputStreamReader(conn.getInputStream()));
			String line;
			while ((line = in.readLine()) != null) {
				result += line;
			}
		} catch (Exception e) {
			System.out.println("发送 POST 请求出现异常!" + e);
			e.printStackTrace();
		}
		// 使用finally块来关闭输出流、输入流
		finally {
			try {
				if (out != null) {
					out.close();
				}
				if (in != null) {
					in.close();
				}
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
		return result;
	}

	// 测试是否有效
	public static void main(String[] args) {
		// 接口地址
		String requestUrl = "http://10.205.0.133:9991/service/getSysUseInfo";
		String params = "systype=4&aa=123";
		try {
			String map = sendPostHttpRequest(requestUrl, params);
			System.out.println(map);
		} catch (Exception e) {
			e.printStackTrace();
		}
		// System.out.println(result("你好啊"));
	}

}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值