Java 发送 get, post 请求
2017-04-01 19:06
423 查看
花了一天时间,基于Java 的 HttpURLConnection 和JDK 1.8的Base64写了个发送get 和post请求的工具类。本工具类有get和post两个方法,使用时只需
String result = HttpUtils.get(url, args);
String result = HttpUtils.post(url, args);
即可获取返回结果。
参数说明:
url: 请求的服务器地址;
args: Map<String, Object> 类型的参数,参数可以是Java的基本类型,基本类型包装类,String,File,InputStream
注意:发送文件时,文件最好控制在5M以内,由于采用Base64编解码,文件太大会造成内存溢出。
源码:
服务器端测试代码:
结果预览:
源码下载:http://download.csdn.net/detail/u013314786/9801676
String result = HttpUtils.get(url, args);
String result = HttpUtils.post(url, args);
即可获取返回结果。
参数说明:
url: 请求的服务器地址;
args: Map<String, Object> 类型的参数,参数可以是Java的基本类型,基本类型包装类,String,File,InputStream
注意:发送文件时,文件最好控制在5M以内,由于采用Base64编解码,文件太大会造成内存溢出。
源码:
package test; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.Base64; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; /** * @ClassName: HttpUtils * @Description: Http 请求工具类 * @author lixk * @date 2017年3月31日 下午6:21:20 * @version [1.0, 2017年3月31日] * @since version 1.0 */ public class HttpUtils { /** * * @Title: get * @Description: 向服务器发起get请求 * @param url * 请求地址 * @param args * 请求参数 * @return 字符串格式的服务器响应数据 * @throws IOException */ public static String get(String url, Map<String, Object> args) throws IOException { // 请求服务器的地址 StringBuilder fullHostUrl = new StringBuilder(url).append("?"); // 如果参数不空,循环遍历参数 if (args != null) { for (Entry<String, Object> entry : args.entrySet()) { String key = entry.getKey(); // 参数名称 Object value = entry.getValue(); // 参数值 // 如果是文件格式参数,获取文件数据流 if (value instanceof File) { value = new FileInputStream(File.class.cast(value)); } // 数据流参数 if (value instanceof InputStream) { fullHostUrl.append(key).append("="); InputStream is = InputStream.class.cast(value); byte[] data = new byte[is.available()]; is.read(data); fullHostUrl.append(URLEncoder.encode(Base64.getEncoder().encodeToString(data), "UTF-8")); // 关闭输入流 is.close(); } else { // 其他类型参数 fullHostUrl.append(key).append("=").append(URLEncoder.encode(String.valueOf(value), "UTF-8")); } // 参数结尾加连接符 fullHostUrl.append("&"); } } URL host = new URL(fullHostUrl.toString()); HttpURLConnection connection = HttpURLConnection.class.cast(host.openConnection()); // 设置为GET请求 connection.setRequestMethod("GET"); // 禁用缓存 connection.setUseCaches(false); // 设置请求头参数 connection.setRequestProperty("Connection", "Keep-Alive"); connection.setRequestProperty("Charsert", "UTF-8"); // 通过输入流来读取服务器响应 int resultCode = connection.getResponseCode(); StringBuilder response = new StringBuilder(); if (resultCode == HttpURLConnection.HTTP_OK) { BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = br.readLine()) != null) { response.append(line); } // 关闭输入流 br.close(); } else { response.append(resultCode); } return response.toString(); } /** * * @Title: post * @Description: 向服务器发起post请求 * @param url * 请求地址 * @param args * 请求参数 * @return 字符串格式的服务器响应数据 * @throws IOException */ public static String post(String url, Map<String, Object> args) throws IOException { // 请求服务器的地址 URL host = new URL(url); HttpURLConnection connection = HttpURLConnection.class.cast(host.openConnection()); // 设置为POST请求 connection.setRequestMethod("POST"); // 发送POST请求必须设置如下两行 connection.setDoOutput(true); connection.setDoInput(true); // 禁用缓存 connection.setUseCaches(false); // 设置请求头参数 connection.setRequestProperty("Connection", "Keep-Alive"); connection.setRequestProperty("Charsert", "UTF-8"); // 获取数据输出流 DataOutputStream dos = new DataOutputStream(connection.getOutputStream()); // 如果参数不空,循环遍历参数 if (args != null) { for (Entry<String, Object> entry : args.entrySet()) { String key = entry.getKey(); // 参数名称 Object value = entry.getValue(); // 参数值 // 如果是文件格式参数,获取文件数据流 if (value instanceof File) { value = new FileInputStream(File.class.cast(value)); } // 数据流参数 if (value instanceof InputStream) { dos.write((key + "=").getBytes()); InputStream is = InputStream.class.cast(value); byte[] data = new byte[is.available()]; is.read(data); dos.write(URLEncoder.encode(Base64.getEncoder().encodeToString(data), "UTF-8").getBytes()); // 关闭输入流 is.close(); } else { // 其他类型参数 dos.write((key + "=" + URLEncoder.encode(String.valueOf(value), "UTF-8")).getBytes()); } // 参数结尾加连接符 dos.write("&".getBytes()); } } // 关闭输出流 dos.flush(); dos.close(); // 通过输入流来读取服务器响应 int resultCode = connection.getResponseCode(); StringBuilder response = new StringBuilder(); if (resultCode == HttpURLConnection.HTTP_OK) { BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = br.readLine()) != null) { response.append(line); } // 关闭输入流 br.close(); } else { response.append(resultCode); } return response.toString(); } public static void main(String[] args) throws IOException { Map<String, Object> map = new HashMap<String, Object>(); map.put("transtype", "translang"); map.put("textFile", new File("java并发编程的艺术.pdf")); map.put("textFileName", "java并发编程的艺术.pdf"); map.put("photo", new File("2.jpg")); map.put("photoName", "照片.jpg"); System.out.println(HttpUtils.post("http://localhost/test", map)); } }
服务器端测试代码:
package test; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.Base64; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/test") public class HttpUtilsTest extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); String textFileName = request.getParameter("textFileName"); // 文件名 String textFile = request.getParameter("textFile"); // 文件 FileOutputStream textOS = new FileOutputStream("C:/data/" + textFileName); textOS.write(Base64.getDecoder().decode(textFile)); textOS.close(); String photoName = request.getParameter("photoName"); // 图片名称 String photo = request.getParameter("photo"); // 图片文件 FileOutputStream photoOS = new FileOutputStream("C:/data/" + photoName); photoOS.write(Base64.getDecoder().decode(photo)); photoOS.close(); PrintWriter out = response.getWriter(); out.write("文件上传成功!"); } }
结果预览:
源码下载:http://download.csdn.net/detail/u013314786/9801676
相关文章推荐
- java发送post和get请求(1)---HttpURLConnection方式
- java发送http的get、post请求
- java 实现向指定URL发送get 和 post 请求
- Java发送http请求 (get 与 post方法请求)转贴
- java发送http的get、post请求
- Java发送http请求 (get 与 post方法请求)
- 使用Java发送POST、GET请求
- 使用Java发送GET、POST请求
- java发送http的get、post请求
- Java发送http请求 (get 与 post方法请求)
- 使用Java发送GET、POST请求
- java发送HTTP请求 (get和post方法请求)
- java apache commons HttpClient发送get和post请求的学习整理
- java发送http的get、post请求
- Java发送http请求 (get 与 post方法请求)
- 【java发送GET/POST请求工具类】
- java 发送HTTP (get 和 post方法请求)
- 使用Java发送GET、POST请求
- 使用Java发送GET、POST请求
- java 发送get和post请求