JAVA8发送带有Body的HTTP GET请求

 更新时间:2022年06月27日 10:47:30   作者:zhangchao19890805  
本文主要介绍了JAVA8发送带有Body的HTTP GET请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

正常来讲,按照HTTP标准,GET请求事不能带有消息体BODY的。但是HTTP标准不是硬性规定,各个厂商可以根据自己的需求做成灵活的扩展。比如ES的搜索接口就要求客户端发送带有BODY的HTTP GET请求。

发送请求的代码分成两个类,接收返回数据的 StrResponse 和发起请求的工具栏 HttpUtils

StrResponse.java

import java.util.List;
import java.util.Map;

/**
 * 接收HTTP返回数据的对象
 * @author zhangchao
 */
public class StrResponse {
    private int code = 200;
    private Map<String, List<String>> headers = null;
    private String body = null;

    public Map<String, List<String>> getHeaders() {
        return headers;
    }

    public String getBody() {
        return body;
    }

    public void setHeaders(Map<String, List<String>> headers) {
        this.headers = headers;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getHeaderStr (String key) {
        List<String> list = this.headers.get(key);
        StringBuilder sb = new StringBuilder();
        for (String str : list) {
            sb.append(str);
        }
        return sb.toString();
    }

    public String getAllHeaderStr() {
        if (null == headers || headers.isEmpty()) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        for (String key : headers.keySet()) {
            List<String> list = headers.get(key);
            sb.append(key + ":\n");
            for (String str : list) {
                sb.append("    " + str + "\n");
            }
        }
        return sb.toString();
    }

    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("StrResponse{");
        sb.append("code=").append(code);
        sb.append(", headers=").append(headers);
        sb.append(", body='").append(body).append('\'');
        sb.append('}');
        return sb.toString();
    }
}

HttpUtils.java

import java.util.Map;
import java.util.List;
import java.io.*;
import java.net.*;

/**
 * 通用http发送方法
 *
 * @author zhangchao
 */
public class HttpUtils
{
    public static StrResponse requestByte_responseStr(final String url, final String method, 
            final byte[] requestBody,final Map<String, String> headerMap, String responseEncoding) {
        BufferedReader in = null;
        BufferedReader errorReader = null;
        HttpURLConnection connection = null;
        StrResponse strResponse = null;
        try {
            StringBuilder result = new StringBuilder();
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            connection = (HttpURLConnection) realUrl.openConnection();
            connection.setRequestMethod(method);
            // 请求内容的长度
            if (null != requestBody && requestBody.length > 0) {
                connection.setRequestProperty("Content-Length", String.valueOf(requestBody.length));
            }
            // 自定义请求头
            if (null != headerMap && false == headerMap.isEmpty()) {
                Set<String> keySet = headerMap.keySet();
                for (String key : keySet) {
                    connection.setRequestProperty(key, headerMap.get(key));
                }
            }
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);
            // 把JSON作为字节流写入post请求的body中
            connection.setDoOutput(true);
            if (null != requestBody && requestBody.length > 0) {
                connection.getOutputStream().write(requestBody);
            }
            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream(), responseEncoding));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line).append("\n");
            }
            strResponse = new StrResponse();
            strResponse.setCode(connection.getResponseCode());
            // 返回的header
            Map<String, List<String>> map = connection.getHeaderFields();
            strResponse.setHeaders(map);
            // 返回的body
            String responseBody = result.toString();
            strResponse.setBody(responseBody);
        } catch (Exception e) {
            e.printStackTrace();
            try {
                if (null != connection) {
                    StringBuilder result = new StringBuilder();
                    // 定义 BufferedReader输入流来读取URL的响应
                    errorReader = new BufferedReader(new InputStreamReader(
                            connection.getErrorStream(), responseEncoding));
                    String line;
                    while ((line = errorReader.readLine()) != null) {
                        result.append(line).append("\n");
                    }
                    strResponse = new StrResponse();
                    strResponse.setCode(connection.getResponseCode());
                    // 返回的header
                    Map<String, List<String>> map = connection.getHeaderFields();
                    strResponse.setHeaders(map);
                    // 返回的body
                    String responseBody = result.toString();
                    strResponse.setBody(responseBody);
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        } finally {
            try {
                if (null != in) {
                    in.close();
                }
                if (null != errorReader) {
                    errorReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return strResponse;
    }

    public static StrResponse requestStr_responseStr(final String url, final String method, final String requestBody,
                                               final Map<String, String> headerMap, final String encoding) {
        // 字符串转成字节流
        byte[] bodyBytes = null;
        try {
            if (requestBody != null) {
                bodyBytes = requestBody.getBytes(encoding);
            }
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
        return requestByte_responseStr(url, method, bodyBytes, headerMap, encoding);
    }
}

使用方法

public class Main{
    public static void main(String[] args) {
        String url = "http://192.168.19.11:9200/yourindex/_search";
        String requestBody = "{" +
                "\"query\": {" +
                "    \"bool\": {" +
                "      \"must\": [" +
                "        {" +
                "          \"term\": {" +
                "            \"areaName.keyword\": \"" + areaName + "\"" +
                "          }" +
                "        }," +
                "        {" +
                "          \"term\": {" +
                "            \"date.keyword\": \"" + date+ "\"" +
                "          }" +
                "        }," +
                "        {" +
                "          \"term\": {\"rytype.keyword\": \"root\"}" +
                "        }" +
                "      ]" +
                "    }" +
                "    " +
                "  }" +
                "}";
        Map<String, String> headerMap = new HashMap<>();
        headerMap.put("Content-Type", "application/json");
        headerMap.put("Referer", url);
        String encoding = "UTF-8";
        StrResponse strResponse = HttpUtils.requestStr_responseStr(url, "GET", requestBody, 
                headerMap, encoding);
        String body = strResponse.getBody();
        logger.info(body);
    }
}

到此这篇关于JAVA8发送带有Body的HTTP GET请求的文章就介绍到这了,更多相关JAVA8发送HTTP GET请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现音频添加自定义时长静音的示例代码

    Java实现音频添加自定义时长静音的示例代码

    这篇文章主要介绍了一个Java工具类,可以实现给一个wav音频添加自定义时长静音。文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编学习一下
    2022-01-01
  • SpringBoot之拦截器与过滤器解读

    SpringBoot之拦截器与过滤器解读

    这篇文章主要介绍了SpringBoot之拦截器与过滤器解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java 实战项目之精品养老院管理系统的实现流程

    Java 实战项目之精品养老院管理系统的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+Springboot+Maven+mybatis+Vue+Mysql实现一个精品养老院管理系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • Springboot启动后执行方法小结

    Springboot启动后执行方法小结

    本文主要介绍了Springboot启动后执行方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Kafka简单客户端编程实例

    Kafka简单客户端编程实例

    这篇文章主要为大家详细介绍了Kafka简单客户端编程实例,利用Kafka的API进行客户端编程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 深入分析Spring BeanDefinition的构造元信息

    深入分析Spring BeanDefinition的构造元信息

    Bean Definition是一个包含Bean元数据的对象,它描述了如何创建Bean实例、Bean属性的值以及Bean之间的依赖关系,本文将带大家深入分析Spring BeanDefinition的构造元信息,需要的朋友可以参考下
    2024-01-01
  • mybatis如何通过接口查找对应的mapper.xml及方法执行详解

    mybatis如何通过接口查找对应的mapper.xml及方法执行详解

    这篇文章主要给大家介绍了利用mybatis如何通过接口查找对应的mapper.xml及方法执行的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • Spring测试基本的控制器实战示例

    Spring测试基本的控制器实战示例

    这篇文章主要为大家介绍了Spring测试基本的控制器实战示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • JAVA实现按时间段查询数据操作

    JAVA实现按时间段查询数据操作

    这篇文章主要介绍了JAVA实现按时间段查询数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 详解mybatis通过mapper接口加载映射文件

    详解mybatis通过mapper接口加载映射文件

    本篇文章主要介绍了mybatis通过mapper接口加载映射文件 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08

最新评论