Java 发送 get, post 请求

2024-09-04 05:58
文章标签 java 请求 post 发送 get

本文主要是介绍Java 发送 get, post 请求,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

花了一天时间,基于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编解码,文件太大会造成内存溢出。

源码:


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 发送 get, post 请求的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1135185

相关文章

使用JavaConfig配置Spring的流程步骤

《使用JavaConfig配置Spring的流程步骤》JavaConfig是Spring框架提供的一种基于Java的配置方式,它通过使用@Configuration注解标记的类来替代传统的XML配置文... 目录一、什么是 JavaConfig?1. 核心注解2. 与 XML 配置的对比二、JavaConf

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

Java JSQLParser解析SQL的使用指南

《JavaJSQLParser解析SQL的使用指南》JSQLParser是一个Java语言的SQL语句解析工具,可以将SQL语句解析成为Java类的层次结构,还支持改写SQL,下面我们就来看看它的具... 目录一、引言二、jsQLParser常见类2.1 Class Diagram2.2 Statement

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

SpringBoot实现多环境配置文件切换

《SpringBoot实现多环境配置文件切换》这篇文章主要为大家详细介绍了如何使用SpringBoot实现多环境配置文件切换功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 示例代码结构2. pom文件3. application文件4. application-dev文

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp