JAVA调用远程接口时模拟发送数据-json格式、x-www-form-urlencoded格式、文件+参数格式

实习期结束,总结一下实习时遇到的一些以前不常用的代码,以方便下次用到时取用,代码不涉及公司机密,需要根据自己的需要进行一定的修改!如有错误欢迎指正!

一个需求是项目的某些接口需要调用外部的接口,由于发送的数据格式各不相同,写了一个工具类根据需要调用,以下是工具类中几个函数。

1.json格式

private static String sendJson(String json, String url) {     // json表示发送的数据,url表示请求的路径     // result 是标识调用后该url返回的结果
        String result = null;
        try {
            CloseableHttpClient client = HttpClients.createDefault();
            HttpPost post = new HttpPost(url);
            post.addHeader("Authorization", "Basic YWRtaW46");
            StringEntity s = new StringEntity(json, "utf-8");
            s.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
                    "application/json"));
            post.setEntity(s);
            // 发送请求
            HttpResponse httpResponse = null;
            httpResponse = client.execute(post);
            // 获取响应输入流
            InputStream inStream = httpResponse.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    inStream, "utf-8"));
            StringBuilder strber = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                strber.append(line + "\n");
            }
            inStream.close();
            result = strber.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

2.x-www-form-urlencoded格式

public static String sendXwww(String json, String url) {
        // 设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        RestTemplate restTemplate = new RestTemplate();
        MultiValueMap forms = new LinkedMultiValueMap();
        JSONObject object = JSONObject.parseObject(json);
        for (String key : object.keySet()) {
            forms.put(key, Collections.singletonList(object.getString(key)));
        }
        HttpEntity> httpEntity = new HttpEntity>(forms, headers);
        //获取返回数据
        String body = restTemplate.postForObject(url, httpEntity, String.class);
        return body;
    }

3.发送文件与其他参数格式

public static String senFile(String url, String filepath, Map paramMap) {     // filepath表示文件路径 paramMap表示其他参数
        // 创建httpPost
        HttpPost httpPost = new HttpPost(url);
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        org.apache.http.HttpEntity entity = null;
        String responseContent = null;
        try {
            File file = new File(filepath);
            // 设置参数
            MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
            //调用的url的文件的参数是file 需要根据调用的url需要的参数进行修改
            multipartEntityBuilder.addBinaryBody("file", file);//表单中其他参数
            if (paramMap != null) {
                for (Map.Entry entry : paramMap.entrySet()) {
                    multipartEntityBuilder.addPart(entry.getKey(), new StringBody(entry.getValue(), ContentType.create("text/plain", Consts.UTF_8)));
                }
            }
            org.apache.http.HttpEntity reqEntity = multipartEntityBuilder.build();
            httpPost.setEntity(reqEntity);
            // 创建默认的httpClient实例.

            httpClient = HttpClients.createDefault();
            // 执行请求
            response = httpClient.execute(httpPost);
            entity = response.getEntity();
            responseContent = EntityUtils.toString(entity, "UTF-8");
        } catch (Exception e) {
            logger.error("<<<<<< HttpUtil sendData error cause {}", e);
        } finally {
            try {
                // 关闭连接,释放资源
                if (response != null) {
                    response.close();
                }
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (IOException e) {
                logger.error("<<<<<< HttpUtil sendData error cause {}", e);
            }
        }
        return responseContent;
    }

Original: https://www.cnblogs.com/boboray/p/16720646.html
Author: 啵啵ray
Title: JAVA调用远程接口时模拟发送数据-json格式、x-www-form-urlencoded格式、文件+参数格式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684238/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球