org.apache.httpcomponents httpclient 发起HTTP JSON请求

Posted 莫大人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了org.apache.httpcomponents httpclient 发起HTTP JSON请求相关的知识,希望对你有一定的参考价值。

1. pom.xml

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.3</version>
</dependency>

2. HttpClient.java

package com.midea.clean.util;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
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.client.methods.HttpUriRequest;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSONObject;
import com.midea.clean.bo.UserBo;

public class HttpClient {
	
	private static final Logger LOGGER = LoggerFactory.getLogger(HttpClient.class); 

	/**
	 * 发送post请求
	 * @param url
	 * @param params
	 * @return
	 */
	public static String post(String url, Map<String, String> params) {
		DefaultHttpClient httpclient = new DefaultHttpClient();
		String body = null;

		HttpPost post = postForm(url, params);

		body = invoke(httpclient, post);

		httpclient.getConnectionManager().shutdown();

		return body;
	}

	/**
	 * 发送get请求
	 * @param url
	 * @return
	 */
	public static String get(String url) {
		DefaultHttpClient httpclient = new DefaultHttpClient();
		String body = null;

		HttpGet get = new HttpGet(url);
		body = invoke(httpclient, get);

		httpclient.getConnectionManager().shutdown();

		return body;
	}

	private static String invoke(DefaultHttpClient httpclient, HttpUriRequest httpost) {

		HttpResponse response = sendRequest(httpclient, httpost);
		String body = paseResponse(response);

		return body;
	}

	private static String paseResponse(HttpResponse response) {
		HttpEntity entity = response.getEntity();

		String charset = EntityUtils.getContentCharSet(entity);

		String body = null;
		try {
			body = EntityUtils.toString(entity);
		} catch (ParseException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return body;
	}

	private static HttpResponse sendRequest(DefaultHttpClient httpclient, HttpUriRequest httpost) {
		HttpResponse response = null;

		try {
			response = httpclient.execute(httpost);
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return response;
	}

	private static HttpPost postForm(String url, Map<String, String> params) {

		HttpPost httpost = new HttpPost(url);
		List<NameValuePair> nvps = new ArrayList<NameValuePair>();
		// 需要传一个token
		//httpost.setHeader("token", "c7a4e021-6527-11e6-96be-fcaa14c3021a1");
		Set<String> keySet = params.keySet();
		for (String key : keySet) {
			nvps.add(new BasicNameValuePair(key, params.get(key)));
		}

		try {
			httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

		return httpost;
	}
	
	 /** 
     * post方式提交json代码 
     * @throws Exception  
     */  
    public static String postJson(String url,String json) throws Exception{  
        //创建默认的httpClient实例.   
        CloseableHttpClient httpclient = null;  
        //接收响应结果  
        CloseableHttpResponse response = null;  
        String result = "";
        //创建httppost  
        httpclient = HttpClients.createDefault();    
        HttpPost httpPost = new HttpPost(url);  
        httpPost.addHeader(HTTP.CONTENT_TYPE,"application/json");  
        //参数  
        StringEntity se = new StringEntity(json);  
        se.setContentEncoding("UTF-8");  
        se.setContentType("application/json");//发送json需要设置contentType  
        httpPost.setEntity(se); 
        LOGGER.debug("http post url:{},json:{}",url,json);
        response = httpclient.execute(httpPost);  
        LOGGER.debug("http post result:{}", response);
        //解析返结果  
        HttpEntity entity = response.getEntity();   
        if(entity != null){  
        	result = EntityUtils.toString(entity, "UTF-8");   
        }  
        httpclient.close();  
        response.close();  
        return result;
    }  

	public static void main(String[] args) throws Exception {
//		HttpClient.get("http://localhost/clean/4a/welcome");
		
//		Map<String,String> params = new HashMap<String,String>();
//		params.put("empName", "1");
//		params.put("empCode", "2");
//		HttpClient.post("http://localhost/clean/4a/privilege/check", params);
		
		UserBo userBo = new UserBo();
    	userBo.setEmpCode("3");
    	userBo.setEmpName("zs");
    	userBo.setErpUid("4");
    	userBo.setMip("5");
    	String jsonStr = JSONObject.toJSONString(userBo);
    	
		HttpClient.postJson("http://localhost/clean/4a/privilege/check", jsonStr);
	}
	
}

  

以上是关于org.apache.httpcomponents httpclient 发起HTTP JSON请求的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 无法解析依赖组:org.apache.httpcomponents,模块:httpmime

org.apache.httpcomponents httpclient 发起HTTP JSON请求

org.apache.httpcomponents:httpclient 工具类

HttpComponents之httpclient

Apache HttpComponents 工具类 [ HttpUtil ]

Http请求Demo