Java发送Post请求

 1,发送正常post请求

    public String executePost(String url, Map<String, String> params, Map<String, String> headers,
            String charSet) {
        CloseableHttpClient httpclient = getHttpClient();
        CloseableHttpResponse response = null;

        try {
            HttpPost post = new HttpPost(new URIBuilder(url).build());
            if (headers != null) {
                post.setHeaders(assemblyHeader(headers));
            }

            //  设置HTTP POST请求参数必须用NameValuePair对象
            List<NameValuePair> lst = new ArrayList<NameValuePair>();
            for (Map.Entry<String, String> entry : params.entrySet()) {
                lst.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
            }
            //  设置HTTP POST请求参数
            UrlEncodedFormEntity posEntity = new UrlEncodedFormEntity(lst, charSet);
            if (logger.isDebugEnabled()) {
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                posEntity.writeTo(os);
                logger.debug("url:{},content:{}", url, os.toString());
            }
            post.setEntity(posEntity);
            post.setConfig(requestConfig);

            response = httpclient.execute(post);
            HttpEntity entity = response.getEntity();
            return EntityUtils.toString(entity, charSet);
        } catch (Exception e) {
            logger.error(e.getMessage() + " when url is:" + url, e);
            return null;
        } finally {
            if (null != response) {
                try {
                    response.close();
                } catch (IOException e) {
                    logger.error(e.getMessage(), e);
                }
            }
        }
    }

2发送json post请求

    private String sendPostByJson(String url, Map<String, Object> params,
            Map<String, String> headers) {
        CloseableHttpClient httpclient = httpClient.getHttpClient();
        HttpPost post = new HttpPost(url);
        if (params != null && !params.isEmpty()) {
            List<Header> tmpHeaders = new ArrayList<>();
            tmpHeaders.add(
                    new BasicHeader("Content-Type", ContentType.APPLICATION_JSON.getMimeType()));
            if (headers != null) {
                headers.keySet().stream().forEach(key -> {
                    Header header = new BasicHeader(key, headers.get(key));
                    tmpHeaders.add(header);
                });
            }
            post.setHeaders(tmpHeaders.toArray(new Header[] {}));
            String json = ObjectMapperUtils.toJSON(params);
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
            post.setEntity(entity);
        }
        int timeout = (int) TimeUnit.MINUTES.toMillis(3);
        RequestConfig timeOutRequestConfig = RequestConfig.custom().setSocketTimeout(timeout)
                .setConnectTimeout(timeout).setConnectionRequestTimeout(timeout).build();
        post.setConfig(timeOutRequestConfig);
        return execAndHandleThrowable(() -> {
            CloseableHttpResponse response = httpclient.execute(post);
            HttpEntity resEntity = response.getEntity();
            return EntityUtils.toString(resEntity, StandardCharsets.UTF_8);
        }, e -> logger.error(e.getMessage() + " when send json to server"));
    }

3,send form data post请求

    public String sendPostByFormData(String url, Map<String, Object> params,
            Map<String, String> headers) {
        CloseableHttpClient httpclient = httpClient.getHttpClient();
        HttpPost post = new HttpPost(url);
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        if (params != null) {
            params.keySet().stream().forEach(key -> {
                Object o = params.get(key);
                if (o != null) {
                    if (o instanceof File) {
                        File file = (File) o;
                        builder.addBinaryBody(key, file, ContentType.MULTIPART_FORM_DATA,
                                StringUtils.defaultString(file.getName()));
                    } else {
                        StringBody stringBody = new StringBody(o.toString(),
                            ContentType.MULTIPART_FORM_DATA);
                        builder.addPart(key, stringBody);
                    }
                }
            });
        }
        List<Header> tmpHeaders = new ArrayList<>();
        if (headers != null) {
            headers.keySet().stream().forEach(key -> {
                Header header = new BasicHeader(key, headers.get(key));
                tmpHeaders.add(header);
            });
        }
        post.setHeaders(tmpHeaders.toArray(new Header[] {}));
        HttpEntity fileEntry = builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE).build();
        post.setEntity(fileEntry);
        int timeout = (int) TimeUnit.MINUTES.toMillis(KConfDefault.TEN);
        RequestConfig timeOutRequestConfig = RequestConfig.custom().setSocketTimeout(timeout)
                .setConnectTimeout(timeout).setConnectionRequestTimeout(timeout).build();
        post.setConfig(timeOutRequestConfig);
        return execAndHandleThrowable(() -> {
            CloseableHttpResponse response = httpclient.execute(post);
            HttpEntity resEntity = response.getEntity();
            return EntityUtils.toString(resEntity, StandardCharsets.UTF_8);
        }, e -> logger.error(e.getMessage() + " when send form data"));
    }

4, 可以通过header判断发送哪个请求

    public String sendPost(String url, Map<String, Object> params, Map<String, String> headers) {
        if (StringUtils.isEmpty(url)) {
            return null;
        }
        if (checkMapKeyValueEqual(headers, "Content-Type",
                ContentType.APPLICATION_JSON.getMimeType())) {
            return sendPostByJson(url, params, headers);
        } else if (checkMapKeyValueEqual(headers, "Content-Type",
                ContentType.MULTIPART_FORM_DATA.getMimeType())) {
            return sendPostByFormData(url, params, headers);
        }
        return sendPostByCommon(url, params, headers);
    }

    private boolean checkMapKeyValueEqual(Map<String, String> map, String key, String value) {
        if (map == null || map.isEmpty()) {
            return false;
        }
        AtomicBoolean search = new AtomicBoolean(false);
        map.keySet().stream().forEach(tmpKey -> {
            if (!search.get() && StringUtils.equalsIgnoreCase(key, tmpKey)
                    && StringUtils.equalsIgnoreCase(value, map.get(tmpKey))) {
                search.set(true);
            }
        });
        return search.get();
    }

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值