Apache HttpClient是Apache提供的一个开源组件,使用HttpClient可以很方便地进行Http请求的调用。自4.1版本开始,HttpClient的API发生了较大的改变,很多方法的调用方式已经和3.x版本不同。本文使用的是当前最新的4.5.3版本。
首先在pom文件中引入httpcomponents依赖包:
1 <dependency> 2 <groupId>org.apache.httpcomponents</groupId> 3 <artifactId>httpclient</artifactId> 4 <version>4.5.3</version> 5 </dependency>
本文展示的是POST请求。
1 import java.io.IOException; 2 3 import org.apache.commons.lang3.ObjectUtils; 4 import org.apache.commons.lang3.StringUtils; 5 import org.apache.http.Consts; 6 import org.apache.http.HttpStatus; 7 import org.apache.http.ParseException; 8 import org.apache.http.client.config.RequestConfig; 9 import org.apache.http.client.methods.CloseableHttpResponse; 10 import org.apache.http.client.methods.HttpPost; 11 import org.apache.http.entity.ContentType; 12 import org.apache.http.entity.StringEntity; 13 import org.apache.http.impl.client.CloseableHttpClient; 14 import org.apache.http.impl.client.HttpClients; 15 import org.apache.http.util.EntityUtils; 16 17 /** 18 * @author 19 * 20 * @date 2017年5月18日 上午9:17:30 21 * 22 * @Description 23 */ 24 public class HttpPostUtils { 25 /** 26 * 27 * @param uri 28 * the request address 29 * @param json 30 * the request data that must be a JSON string 31 * @param connectTimeout 32 * the timeout in milliseconds until a connection is established 33 * @param connectionRequestTimeout 34 * the timeout in milliseconds used when requesting a connection 35 * from the connection manager 36 * @param socketTimeout 37 * the socket timeout in milliseconds, which is the timeout for 38 * waiting for data or, put differently, a maximum period 39 * inactivity between two consecutive data packets 40 * @return null when method parameter is null, "", " " 41 * @throws IOException 42 * if HTTP connection can not opened or closed successfully 43 * @throws ParseException 44 * if response data can not be parsed successfully 45 */ 46 public String postJson(String uri, String json, int connectTimeout, int connectionRequestTimeout, int socketTimeout) 47 throws IOException, ParseException { 48 if (StringUtils.isAnyBlank(uri, json)) { 49 return null; 50 } 51 52 CloseableHttpClient client = HttpClients.createDefault(); 53 HttpPost post = new HttpPost(uri); 54 // Create request data 55 StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON); 56 // Set request body 57 post.setEntity(entity); 58 59 RequestConfig config = RequestConfig.custom().setConnectTimeout(connectTimeout) 60 .setConnectionRequestTimeout(connectionRequestTimeout).setSocketTimeout(socketTimeout).build(); 61 post.setConfig(config); 62 // Response content 63 String responseContent = null; 64 CloseableHttpResponse response = null; 65 try { 66 response = client.execute(post); 67 if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { 68 responseContent = EntityUtils.toString(response.getEntity(), Consts.UTF_8.name()); 69 } 70 } finally { 71 if (ObjectUtils.anyNotNull(response)) { 72 response.close(); 73 } 74 if (ObjectUtils.anyNotNull(client)) { 75 client.close(); 76 } 77 } 78 return responseContent; 79 } 80 }