Java -- 工具类 HttpClient

本文详细介绍如何使用Apache HttpClient进行HTTP请求的发送,包括GET和POST请求的处理,依赖配置,工具类实现,以及如何解决302重定向问题。通过实例演示了如何设置请求参数和配置超时时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、配置依赖

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.5.9</version>
</dependency>

2、工具类

package com.vim.common.utils;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.web.bind.annotation.RequestMethod;

import java.net.URI;
import java.util.ArrayList;
import java.util.List;

public class HttpClientUtils {

    /**
     * 发送请求
     * @param url    请求地址
     * @param method 请求类型 GET\POST
     * @param params 请求参数
     */
    public static String send(String url, RequestMethod method, List<NameValuePair> params){
        CloseableHttpClient client = HttpClientBuilder.create().build();
        CloseableHttpResponse response = null;
        try {
            //请求信息
            params = null == params ? new ArrayList<>() : params;
            URI uri = new URIBuilder(url).setParameters(params).build();
            HttpRequestBase request = null;
            if(method.equals(RequestMethod.GET)){
                request = new HttpGet(uri);
            }else{
                request = new HttpPost(uri);
            }

            //请求配置
            RequestConfig config = RequestConfig.custom()
                    .setConnectTimeout(5000)
                    .setConnectionRequestTimeout(5000)
                    .setSocketTimeout(5000)
                    .setRedirectsEnabled(true).build();
            request.setConfig(config);

            //发送请求
            response = client.execute(request);
            HttpEntity entity = response.getEntity();
            return EntityUtils.toString(entity);
        }catch (Exception e){
            e.printStackTrace();
        }
        return "";
    }

    public static void main(String[] args) {
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("loginName", "admin"));
        params.add(new BasicNameValuePair("password", "123456"));
        String result = HttpClientUtils.send("http://localhost:8080/api/api/user/login", RequestMethod.POST, params);
        System.out.println(result);
    }
}

3、解决 302 重定向问题

// 如果是302重定向
int code = response.getStatusLine().getStatusCode();
if (code == 302) {
    // 获取需要跳转的地址
    Header header = response.getFirstHeader("Location"); 
    // 加上参数
    uri = new URIBuilder(header.getValue()).setParameters(params).build();
    // 构建请求
    request = new HttpPost(uri);
    request.setConfig(config);
    // 重新发送请求
    response = client.execute(request);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值