package com.ycl.utils.http; import com.alibaba.fastjson2.JSON; import com.ycl.properties.RequestProperties; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpRequestRetryHandler; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Component; import java.io.IOException; /** * 请求可重试 * * @author:xp * @date:2024/4/18 14:30 */ @Slf4j @Component @RequiredArgsConstructor public class RetryHttpUtil { private final RequestProperties requestProperties; /** * get请求 * * @param url 请求地址(带参数) * @param token token * @param returnType 响应数据类型 * @param * @return */ public T get(String url, String token, Class returnType) { HttpClient httpClient = HttpClientBuilder .create() .setRetryHandler(new DefaultHttpRequestRetryHandler(requestProperties.getRetry(), true)) .build(); try { HttpGet request = new HttpGet(url); request.setHeader("Authorization", "Bearer " + token); HttpResponse response = httpClient.execute(request); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode >= 200 && statusCode < 300) { // 请求成功 HttpEntity entity = response.getEntity(); // json字符串转响应数据 String responseBody = EntityUtils.toString(entity); T t = JSON.parseObject(responseBody, returnType); EntityUtils.consume(entity); return t; } else { // 请求失败 log.error("Request failed with status code: " + statusCode); } } catch (IOException e) { // 请求发生异常 log.error("Request failed with exception: " + e.getMessage()); } return null; } /** * post请求 * * @param url 请求地址 * @param data 请求体参数 * @param token token * @param returnType 返回的数据类型 * @param * @return */ public T post(String url, Object data, String token, Class returnType) { HttpClient httpClient = HttpClientBuilder .create() .setRetryHandler(new DefaultHttpRequestRetryHandler(requestProperties.getRetry(), true)) .build(); try { HttpPost request = new HttpPost(url); request.setHeader("Authorization", "Bearer " + token); request.setHeader("Content-Type", "application/json;charset=UTF-8"); StringEntity stringEntity = new StringEntity(JSON.toJSONString(data)); request.setEntity(stringEntity); HttpResponse response = httpClient.execute(request); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode >= 200 && statusCode < 300) { // 请求成功 HttpEntity entity = response.getEntity(); // json字符串转响应数据 String responseBody = EntityUtils.toString(entity); T t = JSON.parseObject(responseBody, returnType); EntityUtils.consume(entity); return t; } else { // 请求失败 log.error("Request failed with status code: " + statusCode); } } catch (IOException e) { // 请求发生异常 log.error("Request failed with exception: " + e.getMessage()); } return null; } }