apache httpclient 4.5 的簡單實用

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();
		
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章