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 <T>
|
* @return
|
*/
|
public <T> T get(String url, String token, Class<T> 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 <T>
|
* @return
|
*/
|
public <T> T post(String url, Object data, String token, Class<T> 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;
|
}
|
|
}
|