2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
In moderna programmatibus programmatibus saepe necesse est communicare cum servientibus remotis, ut notitias accipiendas vel datas mittens. Apache HttpClient est bibliotheca popularis Java HTTP clientis quae simpliciorem facit initiationem et responsionem processus petitionum HTTP.Articulus hic mos introducet quomodo utendi consuetudineHttpClientUtils
Classis uti Apache HttpClient ad postulationem inchoandi POST et nexum piscinam administrandi ad perficiendum optimize.
public class HttpClientUtils {
// 静态常量和变量声明
private static final int MAX_TOTAL_CONN = 600;
private static final int MAX_CONN_PER_HOST = 300;
private static final int SOCKET_TIMEOUT = 5000;
private static final int CONNECTION_TIMEOUT = 200;
private static final int CONNECTION_MANAGER_TIMEOUT = 100;
private static CloseableHttpClient httpclient;
private static PoolingHttpClientConnectionManager connMrg;
private static String encoding = StandardCharsets.UTF_8.name();
private static Logger log = LoggerFactory.getLogger(HttpClientUtils.class);
private static final ScheduledExecutorService scheduledService = Executors.newScheduledThreadPool(2);
// 静态代码块,用于初始化 HttpClient 和连接管理器,并设置 JVM 退出时关闭 HttpClient
static {
init();
destroyByJvmExit();
}
// 初始化连接管理器和 HttpClient
private static void init() {
connMrg = new PoolingHttpClientConnectionManager();
connMrg.setMaxTotal(MAX_TOTAL_CONN);
connMrg.setDefaultMaxPerRoute(MAX_CONN_PER_HOST);
httpclient = HttpClients.custom()
.setConnectionManager(connMrg)
.setDefaultRequestConfig(HttpClientUtils.defaultRequestConfig())
.build();
// 定时任务,定期清理过期和空闲连接
scheduledService.scheduleAtFixedRate(() -> {
connMrg.closeExpiredConnections();
connMrg.closeIdleConnections(CONNECTION_MANAGER_TIMEOUT, TimeUnit.MILLISECONDS);
}, 0, CONNECTION_MANAGER_TIMEOUT, TimeUnit.MILLISECONDS);
}
// JVM 退出时关闭 HttpClient
private static void destroyByJvmExit() {
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
try {
httpclient.close();
} catch (IOException e) {
log.error("Error closing HttpClient: {}", e.getMessage());
}
}));
}
// 创建 HttpClientContext
private static HttpClientContext createContext() {
return HttpClientContext.create();
}
// 创建默认的 RequestConfig
private static RequestConfig defaultRequestConfig() {
return RequestConfig.custom()
.setConnectTimeout(CONNECTION_TIMEOUT)
.setSocketTimeout(SOCKET_TIMEOUT)
.setConnectionRequestTimeout(CONNECTION_MANAGER_TIMEOUT)
.build();
}
// 发起带参数的 POST 表单请求,返回字符串结果
public static String postWithParamsForString(String url, List<NameValuePair> params) {
HttpPost httpPost = new HttpPost();
try {
URI uri = new URIBuilder(url).build();
httpPost.setURI(uri);
httpPost.setEntity(new UrlEncodedFormEntity(params, StandardCharsets.UTF_8));
return executeRequest(httpPost);
} catch (URISyntaxException | IOException e) {
log.error("Error executing POST request: {}", e.getMessage());
} finally {
httpPost.releaseConnection();
}
return null;
}
// 发起 GET 请求,返回字符串结果
public static String get(String url, List<NameValuePair> params) {
HttpGet httpGet = new HttpGet();
try {
URI uri = new URIBuilder(url).setParameters(params).build();
httpGet.setURI(uri);
return executeRequest(httpGet);
} catch (URISyntaxException | IOException e) {
log.error("HTTP GET request failed", e);
} finally {
httpGet.releaseConnection();
}
return null;
}
// 发起 Post 请求,返回字符串结果
public static String post(String url, List<NameValuePair> params) {
HttpPost httpPost = new HttpPost();
try {
httpPost.setURI(new URI(url));
httpPost.setEntity(new UrlEncodedFormEntity(params, StandardCharsets.UTF_8));
return executeRequest(httpPost);
} catch (URISyntaxException | IOException e) {
log.error("HTTP POST request failed", e);
} finally {
httpPost.releaseConnection();
}
return null;
}
// 执行 HTTP 请求并处理响应
private static String executeRequest(HttpUriRequest request) throws IOException {
try (CloseableHttpResponse response = httpclient.execute(request, createContext())) {
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
if (entity != null) {
return EntityUtils.toString(entity, encoding);
} else {
log.warn("Empty response entity");
}
} else {
log.error("HTTP request failed with status code: {}", statusCode);
}
} catch (IOException e) {
log.error("HTTP request execution failed: {}", e.getMessage());
throw e;
}
return null;
}
}
stabilis constantes et variabiles:
Initialization et exitium:
HttpClient
et nexum procuratorPoolingHttpClientConnectionManager
。ScheduledExecutorService
Regulariter mundare et otiosos hospites.destroyByJvmExit
In modum, a JVM hamus exit relatus est ut claudatur cum JVM clauditur.HttpClient
。HTTP petitio modum:
postWithParamsForString
Methodus adhibetur postulationi cursoriae faciendae cum parametris.HttpPost
Rogationem aedifica, domicilium pone et parametri petendi, ac tandem vocaexecuteRequest
Modus executionis postulatio.Petitiones et processus respondeo:
executeRequest
Modus recipiendiHttpUriRequest
HTTP petitiones ac responsiones processus perfice.usus HttpClientUtils
Classes scripturam et administrationem petitionum HTTP simpliciorem reddere possunt.
public class Main {
public static void main(String[] args) {
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("param1", "value1"));
params.add(new BasicNameValuePair("param2", "value2"));
String response = HttpClientUtils.postWithParamsForString("http://example.com/api", params);
if (response != null) {
System.out.println("Response: " + response);
} else {
System.err.println("Failed to execute POST request");
}
}
}
Per doctrinam praedictam debes nunc intelligere quomodo utaris HttpClientUtils
Classis HTTP clientes administrare et petitiones inchoare. Accessus hic adiuvare potest communicationem HTTP efficacius in applicationibus Javae tractandis, dum perficiendo et stabiliendo per nexum collatis ac periodicis mechanismis tersus meliore.