HttpClient-多个服务间的调用

HttpClient的使用

HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。下载地址: http://hc.apache.org/

使用方法

    1、给工程添加HttpClient的依赖

    2、执行GET和POST的请求方法

GET不带参数

    public void doGet() throws Exception {

         // 创建一个httpclient对象

         CloseableHttpClient httpClient = HttpClients.createDefault();

         // 创建一个GET对象

         HttpGet get = new HttpGet("http://www.sogou.com");

         // 执行请求

         CloseableHttpResponse response = httpClient.execute(get);

         // 取响应的结果

         int statusCode = response.getStatusLine().getStatusCode();

         System.out.println(statusCode);

         HttpEntity entity = response.getEntity();

         String string = EntityUtils.toString(entity, "utf-8");

         System.out.println(string);

         // 关闭httpclient

         response.close();

         httpClient.close();

    }

POST不带参数

    public void doPost() throws Exception {

         CloseableHttpClient httpClient = HttpClients.createDefault();

         // 创建一个post对象

         HttpPost post = new HttpPost(

                 "http://localhost:8082/httpclient/post2.action");

         // 执行post请求

         CloseableHttpResponse response = httpClient.execute(post);

         String string = EntityUtils.toString(response.getEntity());

         System.out.println(string);

         response.close();

         httpClient.close();

    }
POST带参数

    public void doPostWithParam() throws Exception {

         CloseableHttpClient httpClient = HttpClients.createDefault();

         // 创建一个post对象

         HttpPost post = new HttpPost(

                 "http://localhost:8082/httpclient/post2.action");

         // 创建一个Entity。模拟一个表单

         List<NameValuePair> kvList = new ArrayList<>();

         kvList.add(new BasicNameValuePair("username", "zhangsan"));

         kvList.add(new BasicNameValuePair("password", "123"));

         // 包装成一个Entity对象

         StringEntity entity = new UrlEncodedFormEntity(kvList, "utf-8");

         // 设置请求的内容

         post.setEntity(entity);

         // 执行post请求

         CloseableHttpResponse response = httpClient.execute(post);

         String string = EntityUtils.toString(response.getEntity());

         System.out.println(string);

         response.close();

         httpClient.close();

    }

封装成一个util来使用

public class HttpClientUtil {

    public static String doGet(String url, Map<String, String> param) {

         // 创建Httpclient对象

         CloseableHttpClient httpclient = HttpClients.createDefault();

         String resultString = "";

         CloseableHttpResponse response = null;

         try {

             // 创建uri

             URIBuilder builder = new URIBuilder(url);

             if (param != null) {

                 for (String key : param.keySet()) {

                     builder.addParameter(key, param.get(key));

                 }

             }

             URI uri = builder.build();

             // 创建http GET请求

             HttpGet httpGet = new HttpGet(uri);

             // 执行请求

             response = httpclient.execute(httpGet);

             // 判断返回状态是否为200

             if (response.getStatusLine().getStatusCode() == 200) {

                 resultString = EntityUtils.toString(response.getEntity(),

                          "UTF-8");

             }

         } catch (Exception e) {

             e.printStackTrace();

         } finally {

             try {

                 if (response != null) {

                     response.close();

                 }

                 httpclient.close();

             } catch (IOException e) {

                 e.printStackTrace();

             }

         }

         return resultString;

    }

    public static String doGet(String url) {

         return doGet(url, null);

    }

    public static String doPost(String url, Map<String, String> param) {

         // 创建Httpclient对象

         CloseableHttpClient httpClient = HttpClients.createDefault();

         CloseableHttpResponse response = null;

         String resultString = "";

         try {

             // 创建Http Post请求

             HttpPost httpPost = new HttpPost(url);

             // 创建参数列表

             if (param != null) {

                 List<NameValuePair> paramList = new ArrayList<>();

                 for (String key : param.keySet()) {

                     paramList.add(new BasicNameValuePair(key, param.get(key)));

                 }

                 // 模拟表单

                 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(

                          paramList);

                 httpPost.setEntity(entity);

             }

             // 执行http请求

             response = httpClient.execute(httpPost);

             resultString = EntityUtils.toString(response.getEntity(), "utf-8");

         } catch (Exception e) {

             e.printStackTrace();

         } finally {

             try {

                 response.close();

             } catch (IOException e) {

                 // TODO Auto-generated catch block

                 e.printStackTrace();

             }

         }

         return resultString;

    }

    public static String doPost(String url) {

         return doPost(url, null);

    }

    public static String doPostJson(String url, String json) {

         // 创建Httpclient对象

         CloseableHttpClient httpClient = HttpClients.createDefault();

         CloseableHttpResponse response = null;

         String resultString = "";

         try {

             // 创建Http Post请求

             HttpPost httpPost = new HttpPost(url);

             // 创建请求内容

             StringEntity entity = new StringEntity(json,

                     ContentType.APPLICATION_JSON);

             httpPost.setEntity(entity);

             // 执行http请求

             response = httpClient.execute(httpPost);

             resultString = EntityUtils.toString(response.getEntity(), "utf-8");

         } catch (Exception e) {

             e.printStackTrace();

         } finally {

             try {

                 response.close();

             } catch (IOException e) {

                 // TODO Auto-generated catch block

                 e.printStackTrace();

             }

         }

         return resultString;

    }

}

调用服务时可用HttpClient输入url和相关参数即可

猜你喜欢

转载自blog.csdn.net/weixin_40493969/article/details/82584532