1、HttpClientapache
HttpClient是Apache HttpComponents 下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包(httpclient-4.4.1.jar)。HttpClient类能够用来发送Http请求(get,post,put,delete)相比传统JDK自带的URLConnection,增长了易用性和灵活性,以下为一个post类型的HTTP请求,参数列表中的header表明HTTP请求的header,params表明参数列表,body表明HTTP请求体编程
须要导入:import org.apache.http.client.HttpClients等
public String post(String url,Map<String, String> header, Map<String, Object> params, Map<String, Object> entity, int soTimeout) { CloseableHttpClient httpclient = HttpClients.createDefault(); //建立一个httpclient HttpPost httppost = new HttpPost(); //建立一个httppost String result = null; try { //处理params,拼接url url = joinParam(url, params); //根据需求本身实现该方法 //add request url if (url != null) { httppost.setURI(URI.create(url)); } //add header for (String key : header.keySet()) { httppost.addHeader(key, header.get(key)); } //add entity if (entity != null) { String entityStr = toJSONString(entity); //将map转化为string StringEntity stringEntity = new StringEntity(entityStr, "UTF-8"); stringEntity.setContentType("text/json"); stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); httppost.setEntity(stringEntity); } /** * setConnectTimeout:设置链接超时时间,单位毫秒。 *setConnectionRequestTimeout:设置从connect Manager获取Connection 超时时间,单位毫秒。这个属性是新加的属性,由于目前版本是能够共享链接池的。 *setSocketTimeout:请求获取数据的超时时间,单位毫秒。 */ RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(soTimeout).setConnectionRequestTimeout(soTimeout) .setSocketTimeout(soTimeout).build(); httppost.setConfig(requestConfig); CloseableHttpResponse response = null; try {
//发送post请求 response = httpclient.execute(httppost); } catch (IOException e) { e.printStackTrace(); }
try { // 获取响post响应实体 if (response != null) { HttpEntity responseEntity = response.getEntity(); if(responseEntity != null) { result = responseEntity.toString(); if(responseEntity != null) { result = EntityUtils.toString(responseEntity); } } } } finally { if (response != null) { response.close(); } } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭链接,释放资源 try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return result; }
2、老版本HttpClient(commons-httpclient.jar)json
进入apache官网下找commons HttpClient包,能够看到一下描述:app
The Commons HttpClient project is now end of life, and is no longer being developed. It has been replaced by the Apache HttpComponents project in its HttpClient and HttpCore modules, which offer better performance and more flexibility.工具
能够看到commons-httpclient.jar已被httpclient.jar取代,官方再也不提供commons-httpclient的更新维护服务。如下是使用老版本HttpClient发送一个post请求:post
须要导入:import org.apache.commons.httpclient.HttpClient等flex
public String doPost(String url, Map<String, String> header, Map<String, Object> entity){ String result = ""; HttpClient httpClient = new HttpClient(); PostMethod postMethod = new PostMethod(url); try{ //set header postMethod.addRequestHeader("Content-Type", "application/json"); for (String key : header.keySet()) { postMethod.addRequestHeader(key, header.get(key)); } //set entity String paramsStr = toJSONString(entity); RequestEntity requestEntity = new ByteArrayRequestEntity(paramsStr.getBytes("UTF-8")); postMethod.setRequestEntity(requestEntity); //get response int httpStatusCode = httpClient.executeMethod(postMethod); if (httpStatusCode < 200 || httpStatusCode >= 300) { throw new Exception("httpStatusCode is not correct! " + httpStatusCode); } result = IOUtils.toString(postMethod.getResponseBodyAsStream(), "UTF-8"); }catch (Exception e){ e.printStackTrace(); }finally { postMethod.releaseConnection(); } return result; }