HttpClient

/**
 *
 */
package Default;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
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.HttpDelete;
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.entity.StringEntity;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.tomtop.core.constants.MediaTypes;


/**
 *
 * 功能說明::Http請求工具類
 *
 * HttpUtils.java
 *
 */
public class HttpUtils {
    
     private final static Logger log = LoggerFactory.getLogger(HttpUtils.class);
    
     /**
      * Http GET 方式訪問
      * @param url
      * @return
      * @throws ClientProtocolException
      * @throws IOException
      * @author fwenrong
      */
     public static String get(String url) throws ClientProtocolException, IOException {  
          CloseableHttpClient httpClient = HttpClients.createDefault();
          HttpGet httpGet = new HttpGet(url);
          CloseableHttpResponse response = httpClient.execute(httpGet);
          try{
              HttpEntity entity = response.getEntity();
              log.debug("Response Status: " + response.getStatusLine());
              if (entity != null) {
                  //EntityUtils類:目標服務器響應可信任,而且響應包體長度不大
                  return EntityUtils.toString(entity,Consts.UTF_8);
              }
              return null;
          }finally{
              response.close();
              httpClient.close();
          }
        }  

    /**
     * Http POST 方式訪問
     * @param url  請求URL
     * @param data 請求參數
     * @return
     * @throws IOException
     * @throws ClientProtocolException
     * @author fwenrong
     *
     */
    public static String post(String url,
            List<? extends org.apache.http.NameValuePair> data) throws ClientProtocolException, IOException {
          CloseableHttpClient httpClient = HttpClients.createDefault();
          HttpPost httpPost = new HttpPost(url);
          if(data != null){
              httpPost.setEntity(new UrlEncodedFormEntity(data,Consts.UTF_8));
          }
          CloseableHttpResponse response = httpClient.execute(httpPost);
          try{
              HttpEntity entity = response.getEntity();
              log.debug("Response Status: " + response.getStatusLine());
              if (entity != null) {
                  return EntityUtils.toString(entity,Consts.UTF_8);
              }
              return null;
          }finally{
              response.close();
              httpClient.close();
          }
    }
    
    /**
     * http的PUT方式訪問
     * @param url 請求URL url +"/"+put更新參數
     * @param data 請求參數
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     * @author 3071
     */
    public static String put(String url,
            List<? extends org.apache.http.NameValuePair> data) throws ClientProtocolException, IOException {
          CloseableHttpClient httpClient = HttpClients.createDefault();
          HttpPut httpPut = new HttpPut(url);
          if(data != null){
              httpPut.setEntity(new UrlEncodedFormEntity(data,Consts.UTF_8));
          }
          CloseableHttpResponse response = httpClient.execute(httpPut);
          try{
              HttpEntity entity = response.getEntity();
              log.debug("Response Status: " + response.getStatusLine());
              if (entity != null) {
                  return EntityUtils.toString(entity,Consts.UTF_8);
              }
              return null;
          }finally{
              response.close();
              httpClient.close();
          }
    }
    
    /**
     * http delete 方式訪問
     * @param url url地址, 格式:url +"/"+刪除參數
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     * @author 3071
     */
    public static String delete(String url) throws ClientProtocolException, IOException {
          CloseableHttpClient httpClient = HttpClients.createDefault();
          HttpDelete httpDelete = new HttpDelete(url);
          CloseableHttpResponse response = httpClient.execute(httpDelete);
          try{
              HttpEntity entity = response.getEntity();
              log.debug("Response Status: " + response.getStatusLine());
              if (entity != null) {
                  return EntityUtils.toString(entity,Consts.UTF_8);
              }
              return null;
          }finally{
              response.close();
              httpClient.close();
          }
    }
    
    /**
     * Http POST方式請求JSON包體
     * @param url 請求URL
     * @param data json包體
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     * @author 3071
     */
    public static String postJson(String url,String data) throws ClientProtocolException, IOException {
        return HttpUtils.post(url, data, MediaTypes.JSON);
    }
    
    /**
     * Http POSt方式請求 xml包體
     * @param url 請求URL
     * @param data xml包體
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     * @author 3071
     */
    public static String postXml(String url,String data) throws ClientProtocolException, IOException {
        return HttpUtils.post(url, data, MediaTypes.APPLICATION_XML);
    }
    
    
    
    /**
     * Http POST 方式訪問
     * @param url 請求URL
     * @param data 請求參數(能夠是json串 也能夠是xml格式包體)
     * @param contentType 對應請求內容格式
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     * @author 3071
     */
    public static String post(String url,String data,String contentType) throws ClientProtocolException, IOException {
          CloseableHttpClient httpClient = HttpClients.createDefault();
          HttpPost httpPost = new HttpPost(url);
          if(StringUtils.isNotEmpty(data)){
              StringEntity entity = new StringEntity(data, Consts.UTF_8);
              entity.setContentType(contentType);
              httpPost.setEntity(entity);
          }
          CloseableHttpResponse response = httpClient.execute(httpPost);
          try{
              HttpEntity entity = response.getEntity();
              log.debug("Response Status: " + response.getStatusLine());
              if (entity != null) {
                  return EntityUtils.toString(entity,Consts.UTF_8);
              }
              return null;
          }finally{
              response.close();
              httpClient.close();
          }
    }
    
    /**
     * Http PUT 方式訪問
     * @param url url地址, 格式:url +"/"+put參數
     * @param data  請求參數(能夠是json串 也能夠是xml格式包體)
     * @param contentType 對應請求內容格式
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     * @author 3071
     */
    public static String put(String url,String data,String contentType) throws ClientProtocolException, IOException {
          CloseableHttpClient httpClient = HttpClients.createDefault();
          HttpPut httpPut = new HttpPut(url);
          if(StringUtils.isNotEmpty(data)){
              StringEntity entity = new StringEntity(data, Consts.UTF_8);
              entity.setContentType(contentType);
              httpPut.setEntity(entity);
          }
          CloseableHttpResponse response = httpClient.execute(httpPut);
          try{
              HttpEntity entity = response.getEntity();
              log.debug("Response Status: " + response.getStatusLine());
              if (entity != null) {
                  return EntityUtils.toString(entity,Consts.UTF_8);
              }
              return null;
          }finally{
              response.close();
              httpClient.close();
          }
    }
    
    /**
     * Http PUT方式請求JSON包體
     * @param url url地址, 格式:url +"/"+put參數
     * @param data json包體
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     * @author 3071
     */
    public static String putJson(String url,String data) throws ClientProtocolException, IOException {
        return HttpUtils.put(url, data, MediaTypes.JSON);
    }
    
    /**
     * Http PUT方式請求 xml包體
     * @param url url地址, 格式:url +"/"+put參數
     * @param data xml包體
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     * @author 3071
     */
    public static String putXml(String url,String data) throws ClientProtocolException, IOException {
        return HttpUtils.put(url, data, MediaTypes.APPLICATION_XML);
    }
    
    
    
    
    /**
     * Http Post 表單提交 附加一個文件
     * @param url 請求url
     * @param file 文件
     * @return
     * @author 3071
     * @throws IOException
     * @throws ClientProtocolException
     */
    public static String postFile(String url,File file) throws ClientProtocolException, IOException{
        
          CloseableHttpClient httpClient = HttpClients.createDefault();
          HttpPost httpPost = new HttpPost(url);
          HttpEntity requestEntity = MultipartEntityBuilder.create()
                  .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
                  .addBinaryBody("file",FileUtils.toByteArray(file))
                  .setCharset(Consts.UTF_8).build();
          httpPost.setEntity(requestEntity);
          CloseableHttpResponse response = httpClient.execute(httpPost);
          HttpEntity responseEntity = null;
          try{
              String responseStr = null;
              //獲取響應對象
              responseEntity = response.getEntity();
              log.debug("Response Status: " + response.getStatusLine());
              if (responseEntity != null) {
                  responseStr =  EntityUtils.toString(responseEntity,Consts.UTF_8);
              }
              //銷燬
              EntityUtils.consumeQuietly(responseEntity);
              return responseStr;
          }finally{
              response.close();
              httpClient.close();
          }
    }
    
    /**
     * 模擬文件http上傳(基於jdk原始方式)
     * @param url
     * @param file
     * @return
     * @author fwenrong
     */
    public static String postFileOriginal(String url,File file){
        try {
            URL postUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) postUrl.openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            byte[] f = FileUtils.toByteArray(file);
            //StringBuilder sb = new StringBuilder();
            conn.setRequestProperty("Content-Type", "multipart/form-data");
            conn.setRequestProperty("Content-Length", String.valueOf(f.length));
            OutputStream out = conn.getOutputStream();
            out.write(f);
            out.flush();
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String responseStr = "";
            String line = null;
            while((line = in.readLine()) != null){
                responseStr += line;
            }
            in.close();
            out.close();
            return responseStr;
        } catch (MalformedURLException e) {
            log.error("MalformedURLException:"+url);
            e.printStackTrace();
        } catch (IOException e) {
            log.error("IOException:IO異常。");
            e.printStackTrace();
            
        }
        return null;
    }
}

java

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息