Httpclient发送http请求

来源:互联网 发布:百卓优采软件 编辑:程序博客网 时间:2024/06/05 05:24

1.引入httpclient 所需要的jars

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

2.实现HttpConnectionManager,里面有连接池保存连接。

package ****.httpclient;import java.security.NoSuchAlgorithmException;import javax.annotation.PostConstruct;import javax.net.ssl.SSLContext;import org.apache.http.config.Registry;import org.apache.http.config.RegistryBuilder;import org.apache.http.conn.socket.ConnectionSocketFactory;import org.apache.http.conn.socket.LayeredConnectionSocketFactory;import org.apache.http.conn.socket.PlainConnectionSocketFactory;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.springframework.stereotype.Component;@Component("httpConnectionManager")public class HttpConnectionManager {    PoolingHttpClientConnectionManager cm = null;    @PostConstruct    public void init() {        LayeredConnectionSocketFactory sslsf = null;        try {            sslsf = new SSLConnectionSocketFactory(SSLContext.getDefault());        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        }        Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create()                .register("https", sslsf)                .register("http", new PlainConnectionSocketFactory())                .build();        cm =new PoolingHttpClientConnectionManager(socketFactoryRegistry);        cm.setMaxTotal(200);        cm.setDefaultMaxPerRoute(20);    }    public CloseableHttpClient getHttpClient() {        CloseableHttpClient httpClient = HttpClients.custom()                .setConnectionManager(cm)                .build();        /*CloseableHttpClient httpClient = HttpClients.createDefault();//如果不采用连接池就是这种方式获取连接*/        return httpClient;    }}

3.实现HttpClientUtil

package *****.httpclient;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.apache.http.HttpEntity;import org.apache.http.NameValuePair;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.entity.ContentType;import org.apache.http.entity.StringEntity;import org.apache.http.entity.mime.MultipartEntityBuilder;import org.apache.http.entity.mime.content.FileBody;import org.apache.http.entity.mime.content.StringBody;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Component("httpClientUtil")public class HttpClientUtil {    @Autowired    private HttpConnectionManager httpConnectionManager;     /**      * 发送 post请求      * @param httpUrl 地址      * @throws IOException      * @throws ClientProtocolException      */      public String sendHttpPost(String httpUrl) throws ClientProtocolException, IOException {          HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost            return sendHttpPost(httpPost);      }      /**      * 发送 post请求      * @param httpUrl 地址      * @param params 参数(格式:key1=value1&key2=value2)      * @throws IOException      * @throws ClientProtocolException      */      public String sendHttpPost(String httpUrl, String params) throws ClientProtocolException, IOException {          HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost            //设置参数          StringEntity stringEntity = new StringEntity(params, "UTF-8");          stringEntity.setContentType("application/x-www-form-urlencoded");          httpPost.setEntity(stringEntity);          return sendHttpPost(httpPost);      }      /**      * 发送 post请求      * @param httpUrl 地址      * @param maps 参数      * @throws IOException      * @throws ClientProtocolException      */      public String sendHttpPost(String httpUrl, Map<String, String> maps) throws ClientProtocolException, IOException {          HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost            // 创建参数队列            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();          for (String key : maps.keySet()) {              nameValuePairs.add(new BasicNameValuePair(key, maps.get(key)));          }          httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));          return sendHttpPost(httpPost);      }      /**      * 发送 post请求(带文件)      * @param httpUrl 地址      * @param maps 参数      * @param fileLists 附件      * @throws IOException      * @throws ClientProtocolException      */      public String sendHttpPost(String httpUrl, Map<String, String> maps, List<File> fileLists) throws ClientProtocolException, IOException {          HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost            MultipartEntityBuilder meBuilder = MultipartEntityBuilder.create();          for (String key : maps.keySet()) {              meBuilder.addPart(key, new StringBody(maps.get(key), ContentType.TEXT_PLAIN));          }          for(File file : fileLists) {              FileBody fileBody = new FileBody(file);              meBuilder.addPart("files", fileBody);          }          HttpEntity reqEntity = meBuilder.build();        httpPost.setEntity(reqEntity);          return sendHttpPost(httpPost);      }      /**      * 发送Post请求      * @param httpPost      * @return      * @throws IOException      * @throws ClientProtocolException      */      private String sendHttpPost(HttpPost httpPost) throws ClientProtocolException, IOException {          CloseableHttpClient httpClient = httpConnectionManager.getHttpClient();        CloseableHttpResponse response=null;        response = httpClient.execute(httpPost);        HttpEntity entity = null;          String responseContent = null;          // 执行请求          entity = response.getEntity();          responseContent = EntityUtils.toString(entity, "UTF-8");          return responseContent;      }      /**      * 发送 get请求      * @param httpUrl      * @throws IOException      * @throws ClientProtocolException      */      public String sendHttpGet(String httpUrl) throws ClientProtocolException, IOException {          HttpGet httpGet = new HttpGet(httpUrl);// 创建get请求          return sendHttpGet(httpGet);      }      /**      * 发送Get请求      * @param httpPost      * @return      * @throws IOException      * @throws ClientProtocolException      */      private String sendHttpGet(HttpGet httpGet) throws ClientProtocolException, IOException {          CloseableHttpClient httpClient = httpConnectionManager.getHttpClient();        CloseableHttpResponse response=null;         HttpEntity entity = null;          String responseContent = null;          // 执行请求          response = httpClient.execute(httpGet);          entity = response.getEntity();          responseContent = EntityUtils.toString(entity, "UTF-8");          return responseContent;      }  }

4.调用HttpClientUtil里面的方法。

0 0
原创粉丝点击