HttpComponents - HttpClient 基础篇

HttpComponents - HttpClient 基础篇_第1张图片HttpComponents - HttpClient 基础篇_第2张图片

HttpComponents - HttpClient 基础篇_第3张图片

Ps:CDSpace工具。

HttpComponents - HttpClient 基础篇_第4张图片

Ps:发送个get和post请求的5个步骤

HttpComponents - HttpClient 基础篇_第5张图片HttpComponents - HttpClient 基础篇_第6张图片

HttpComponents - HttpClient 基础篇_第7张图片HttpComponents - HttpClient 基础篇_第8张图片

核心代码:

// pom.xml


	junit
	junit
	3.8.1
	test



	log4j
	log4j
	1.2.17



	org.apache.httpcomponents
	httpclient
	4.5.2



	org.apache.commons
	commons-io
	1.3.2
package com.imooc.MRAutoSpace.model.http;

import java.util.Map;
import org.apache.http.client.methods.HttpUriRequest;

public class HttpClientRequest {

	private String url;
	
//	private HttpUriRequest httpMethod;
	
	private Map headers;
	
	private String body;

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

//	public HttpUriRequest getHttpMethod() {
//		return httpMethod;
//	}
//
//	public void setHttpMethod(HttpUriRequest httpMethod) {
//		this.httpMethod = httpMethod;
//	}

	public Map getHeaders() {
		return headers;
	}

	public void setHeaders(Map headers) {
		this.headers = headers;
	}

	public String getBody() {
		return body;
	}

	public void setBody(String body) {
		this.body = body;
	}
}
package com.imooc.MRAutoSpace.model.http;

import java.util.Map;

public class HttpClientResponse {
	
	private String statusCode;
	
	private Map headers;
	
	private String body;

	public String getStatusCode() {
		return statusCode;
	}

	public void setStatusCode(String statusCode) {
		this.statusCode = statusCode;
	}

	public Map getHeaders() {
		return headers;
	}

	public void setHeaders(Map headers) {
		this.headers = headers;
	}

	public String getBody() {
		return body;
	}

	public void setBody(String body) {
		this.body = body;
	}
}
package com.imooc.MRAutoSpace.uitls.http;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.IOUtils;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.log4j.Logger;
import com.imooc.MRAutoSpace.model.http.HttpClientRequest;
import com.imooc.MRAutoSpace.model.http.HttpClientResponse;

public class HttpClientUtil {
	private static Logger logger = Logger.getLogger(HttpClientUtil.class);
	private CloseableHttpClient httpClient;
	
	public static HttpClientResponse doGet(HttpClientRequest httpClientRequest) {
		HttpClientUtil httpClientUtil = new HttpClientUtil();
		httpClientUtil.init();
		HttpGet httpGet = new HttpGet(httpClientRequest.getUrl());
		return httpClientUtil.sendRequest(httpGet, httpClientRequest);
	}
	
	public static HttpClientResponse doPost(HttpClientRequest httpClientRequest) {
		HttpClientUtil httpClientUtil = new HttpClientUtil();
		httpClientUtil.init();
		HttpPost httpPost = new HttpPost(httpClientRequest.getUrl());
		return httpClientUtil.sendRequest(httpPost, httpClientRequest);
	}
	
	public static HttpClientResponse doDelete(HttpClientRequest httpClientRequest) {
		HttpClientUtil httpClientUtil = new HttpClientUtil();
		httpClientUtil.init();
		HttpDelete httpDelete = new HttpDelete(httpClientRequest.getUrl());
		return httpClientUtil.sendRequest(httpDelete, httpClientRequest);
	}
	
	public static HttpClientResponse doPut(HttpClientRequest httpClientRequest) {
		HttpClientUtil httpClientUtil = new HttpClientUtil();
		httpClientUtil.init();
		HttpPut httpPut = new HttpPut(httpClientRequest.getUrl());
		return httpClientUtil.sendRequest(httpPut, httpClientRequest);
	}
	
	private void init() {
		httpClient = HttpClientBuilder.create().build();
		logger.info("Start init http connection.");
	}
	
	private HttpClientResponse sendRequest(HttpRequestBase httpRequestBase, HttpClientRequest httpClientRequest) {
		HttpClientResponse httpClientResponse = new HttpClientResponse();
		String encodingOfBody = "ISO-8859-1";
		Map requestHeaders = httpClientRequest.getHeaders();
		for ( String key : requestHeaders.keySet()) {
			httpRequestBase.setHeader(key, requestHeaders.get(key));
			if (key.toLowerCase().equals("content-type")) {
				String contentType = requestHeaders.get(key);
				if ( contentType.split(";").length >= 2 ) {
					encodingOfBody = contentType.split(";")[1].split("=")[1];
				}
			}
		}
		
		if ( httpRequestBase instanceof HttpEntityEnclosingRequestBase ) {
			((HttpEntityEnclosingRequestBase) httpRequestBase).setEntity(new StringEntity(httpClientRequest.getBody(), encodingOfBody));
		}
		
		try {
			CloseableHttpResponse response = httpClient.execute(httpRequestBase);
			String statusCode = response.getStatusLine().toString().split(" ")[1];
			logger.info(statusCode);
			httpClientResponse.setStatusCode(statusCode);
			
			Header[] headers = response.getAllHeaders();
			Map responseHeaders = new HashMap();
			for (Header header : headers) {
				logger.info(header.getName() + ": " + header.getValue());
				responseHeaders.put(header.getName(), header.getValue());
			}
			httpClientResponse.setHeaders(responseHeaders);
			
			HttpEntity entity = response.getEntity();
			String body = IOUtils.toString(entity.getContent());
			logger.info(body);
			httpClientResponse.setBody(body);
			
			this.close();
		} catch (ClientProtocolException e) {
			logger.error("This http protocol is not supported.");
			logger.error(e.getMessage());
		} catch (IOException e) {
			logger.error(e.getMessage());
		}
		return httpClientResponse; 
	}
	
	private void close() {
		try {
			httpClient.close();
			logger.info("Close http connection successfully!");
		} catch (IOException e) {
			logger.error("Close http connction failed.");
			logger.error(e.getMessage());
		}
	}
	
	public String formatUrl(String url, Map queryParams) {
		String result = "";
		
		String params = "";
		for (String key : queryParams.keySet()) {
			params += (key + "=" + queryParams.get(key) + "&"); 
		}
		
		result += (url + "?" + params.substring(0, params.length() - 1));
		
		return result;
	}

	public CloseableHttpClient getHttpClient() {
		return httpClient;
	}

	public void setHttpClient(CloseableHttpClient httpClient) {
		this.httpClient = httpClient;
	}
}
package com.imooc.MRAutoSpace.http;

import java.util.HashMap;
import java.util.Map;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.log4testng.Logger;
import com.imooc.MRAutoSpace.model.http.HttpClientRequest;
import com.imooc.MRAutoSpace.model.http.HttpClientResponse;
import com.imooc.MRAutoSpace.uitls.http.HttpClientUtil;

public class HttpClientUtilTest {

	private static Logger logger = Logger.getLogger(HttpClientUtilTest.class);
	
	@Test
	public void testMethod() {
		HttpClientRequest request = new HttpClientRequest();
		request.setUrl("http://localhost:19090/getClassName?name=value");
		Map requestHeaders = new HashMap();
		requestHeaders.put("name01", "value01");
		requestHeaders.put("name02", "value02");
		request.setHeaders(requestHeaders);
		
		HttpClientResponse response = HttpClientUtil.doGet(request);
		Assert.assertEquals("400", response.getStatusCode());
	}
	
	@Test
	public void testMethodPost() {
		HttpClientRequest request = new HttpClientRequest();
		request.setUrl("http://localhost:19090/getClassName?name=value");
		Map requestHeaders = new HashMap();
		requestHeaders.put("name01", "value01");
		requestHeaders.put("name02", "value02");
		request.setHeaders(requestHeaders);
		request.setBody("test body string");
		
		HttpClientResponse response = HttpClientUtil.doPost(request);
		Assert.assertEquals("{\"id\": \"\", \"className\": \"testClassName\"}", response.getBody());
	}
	
	@Test
	public void testFormatUrl() {
		String url = "http://localhost:19090/testurl";
		Map requestHeaders = new HashMap();
		requestHeaders.put("name01", "value01");
		requestHeaders.put("name02", "value02");
		HttpClientUtil util = new HttpClientUtil();
		Assert.assertEquals(util.formatUrl(url, requestHeaders), "http://localhost:19090/testurl?name02=value02&name01=value01");
	}
}

 

你可能感兴趣的:(HttpComponents,CDSpace,HttpClient,Apache,测试,#,HttpComponents)