1 创建一个 maven 项目
<dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> </dependencies>
2. 测试代码如下
package com.iraid.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; 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.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; /** * apache httpclient-4.5 简单使用。 * CloseableHttpClient 此类线程安全,且采用 连接池 管理 * @author wangfeihu * */ public class HttpClientTest { public static void main(String[] args) throws Exception { CloseableHttpClient httpclient = HttpClients.createDefault(); try { HttpGet httpGet = new HttpGet("http://127.0.0.1:8080/greet"); CloseableHttpResponse response1 = httpclient.execute(httpGet); // try { System.out.println(response1.getStatusLine()); HttpEntity entity1 = response1.getEntity(); // 处理响应内容 InputStream is = entity1.getContent(); String content = convertStreamToString(is); System.out.println(content); //关闭流 EntityUtils.consume(entity1); } finally { response1.close(); } HttpPost httpPost = new HttpPost("http://127.0.0.1:8080/login"); List <NameValuePair> params = new ArrayList <NameValuePair>(); params.add(new BasicNameValuePair("username", "ryan")); params.add(new BasicNameValuePair("password", "secret")); httpPost.setEntity(new UrlEncodedFormEntity(params)); CloseableHttpResponse response2 = httpclient.execute(httpPost); try { System.out.println(response2.getStatusLine()); HttpEntity entity2 = response2.getEntity(); // do something useful with the response body // and ensure it is fully consumed InputStream is = entity2.getContent(); String content = convertStreamToString(is); System.out.println(content); EntityUtils.consume(entity2); } finally { response2.close(); } } finally { httpclient.close(); } } public static String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } }
3 连接池管理
/** * 带 htttp 请求连接池 */ public static void pooling() { PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); // Increase max total connection to 200 cm.setMaxTotal(200); // Increase default max connection per route to 20 cm.setDefaultMaxPerRoute(20); // Increase max connections for localhost:80 to 50 HttpHost localhost = new HttpHost("locahost", 80); cm.setMaxPerRoute(new HttpRoute(localhost), 50); // 初始化连接 CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(cm).build(); }