使用HttpClient发送post和get请求,并解决返回值中文乱码

1.在pom引入HttpClient

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>

2.创建HttpClientHelper方法

package com.wins.home.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.wins.common.util.StringUtility;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.params.HttpMethodParams;

import java.io.IOException;

/**
 * @author:shiyx
 * @date:2021/11/23
 * @description:
 */
@Slf4j
public class HttpClientHelper {

    private HttpClientHelper() {
    }


    /**
     * 发起POST请求
     *
     * @param url       url
     * @param paramJson 参数的json格式
     */
    public static JSONObject sendPost(String url, String paramJson) {
        log.info("开始发起POST请求,请求地址为{},参数为{}", url, paramJson);

        // 创建httpClient实例对象
        HttpClient httpClient = new HttpClient();
        // 设置httpClient连接主机服务器超时时间:15000毫秒
        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
        // 创建post请求方法实例对象
        PostMethod postMethod = new PostMethod(url);
        // 设置post请求超时时间
        postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
        postMethod.addRequestHeader("Content-Type", "application/json");

        try {
            //json格式的参数解析
            RequestEntity entity = new StringRequestEntity(paramJson, "application/json", "UTF-8");
            postMethod.setRequestEntity(entity);
            httpClient.executeMethod(postMethod);
            // 解决返回值中文乱码
            postMethod.getParams().setContentCharset("UTF-8");
            String result = postMethod.getResponseBodyAsString();
            log.info("返回信息为:{}", result);

            postMethod.releaseConnection();
            if (StringUtility.isNotEmpty(result)){
                return JSON.parseObject(result);
            }


        } catch (IOException e) {
            log.error("POST请求发出失败,请求的地址为{},参数为{},错误信息为{}", url, paramJson, e.getMessage(), e);
        }
        return null;
    }

    /**
     * 发起GET请求
     *
     * @param urlParam url请求,包含参数
     */
    public static JSONObject sendGet(String urlParam) {
        log.info("开始发起GET请求,请求地址为{}", urlParam);
        // 创建httpClient实例对象
        HttpClient httpClient = new HttpClient();
        // 设置httpClient连接主机服务器超时时间:15000毫秒
        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
        // 创建GET请求方法实例对象
        GetMethod getMethod = new GetMethod(urlParam);
        // 设置post请求超时时间
        getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
        getMethod.addRequestHeader("Content-Type", "application/json");
        try {
            httpClient.executeMethod(getMethod);
            getMethod.getParams().setContentCharset("UTF-8");
            String result = getMethod.getResponseBodyAsString();
            getMethod.releaseConnection();
            log.info("返回信息为:{}", result);
            if (StringUtility.isNotEmpty(result)){
                return JSON.parseObject(result);
            }
        } catch (IOException e) {
            log.error("GET请求发出失败,请求的地址为{},错误信息为{}", urlParam, e.getMessage(), e);
        }
        return null;
    }

    public static void main(String[] args) {
        String url = "https://jiashubing.cn/tencenttest";
        String param = "{\"aaa\":\"bbbbbbb\"}";
        sendPost(url, param);
        String urlParam = "https://jiashubing.cn/talk/document?fileid=1234";
        sendGet(urlParam);
    }



}

3.里面的@Slf4j如果没有就注释掉好了,反正是打印的日志

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值