• 如何使用HttpClient包实现JAVA发起HTTP请求?


    HttpClient工具使用

      今天在搭建公司项目框架的时候,发现缺少了一个Java发送HTTP请求的工具类,在网上找了一通,经过自己的改造,已经能实现get请求和post请求的了,现在将代码贴在这里。给大家参考。

      1 package com.sunyard.util;
      2 
      3 import com.sunyard.constans.Constants;
      4 
      5 import org.apache.commons.httpclient.*;
      6 import org.apache.commons.httpclient.methods.GetMethod;
      7 import org.apache.commons.httpclient.methods.PostMethod;
      8 import org.apache.commons.httpclient.methods.RequestEntity;
      9 import org.apache.commons.httpclient.methods.StringRequestEntity;
     10 import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
     11 import org.apache.commons.lang.StringUtils;
     12 import org.apache.logging.log4j.LogManager;
     13 import org.apache.logging.log4j.Logger;
     14 
     15 import java.io.IOException;
     16 import java.net.URL;
     17 
     18 public class HTTPUtils {
     19 
     20     private final static Logger logger = LogManager.getLogger(Constants.LOGNAME);
     21 
     22     private final static String OPERATER_NAME = "【HTTP操作】";
     23 
     24     private final static int SUCCESS = 200;
     25 
     26     private final static String UTF8 = "UTF-8";
     27 
     28     private HttpClient client;
     29 
     30     private static HTTPUtils instance = new HTTPUtils();
     31 
     32     /**
     33      * 私有化构造器
     34      */
     35     private HTTPUtils() {
     36 
     37         HttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();
     38         HttpConnectionManagerParams params = httpConnectionManager.getParams();
     39         params.setConnectionTimeout(5000);
     40         params.setSoTimeout(20000);
     41         params.setDefaultMaxConnectionsPerHost(1000);
     42         params.setMaxTotalConnections(1000);
     43         client = new HttpClient(httpConnectionManager);
     44         client.getParams().setContentCharset(UTF8);
     45         client.getParams().setHttpElementCharset(UTF8);
     46     }
     47 
     48     /**
     49      * get请求
     50      */
     51     public static String get(URL url) {
     52         return instance.doGet(url);
     53     }
     54 
     55     private String doGet(URL url) {
     56         long beginTime = System.currentTimeMillis();
     57         String respStr = StringUtils.EMPTY;
     58         try {
     59             logger.info(OPERATER_NAME + "开始get通信,目标host:" + url);
     60             HttpMethod method = new GetMethod(url.toString());
     61             // 中文转码
     62             method.getParams().setContentCharset(UTF8);
     63             try {
     64                 client.executeMethod(method);
     65             } catch (HttpException e) {
     66 
     67                 logger.error(new StringBuffer("发送HTTP GET给
    ").append(url)
     68                         .append("
    HTTP异常
    "), e);
     69             } catch (IOException e) {
     70 
     71                 logger.error(new StringBuffer("发送HTTP GET给
    ").append(url)
     72                         .append("
    IO异常
    "), e);
     73             }
     74             if (method.getStatusCode() == SUCCESS) {
     75                 respStr = method.getResponseBodyAsString();
     76             }
     77             // 释放连接
     78             method.releaseConnection();
     79 
     80             logger.info(OPERATER_NAME + "通讯完成,返回码:" + method.getStatusCode());
     81             logger.info(OPERATER_NAME + "返回内容:" + method.getResponseBodyAsString());
     82             logger.info(OPERATER_NAME + "结束..返回结果:" + respStr);
     83         } catch (Exception e) {
     84             logger.info(OPERATER_NAME, e);
     85         }
     86         long endTime = System.currentTimeMillis();
     87         logger.info(OPERATER_NAME + "共计耗时:" + (endTime - beginTime) + "ms");
     88 
     89         return respStr;
     90     }
     91 
     92 
     93     /**
     94      * POST请求
     95      */
     96     public static String post(URL url, String content) {
     97         return instance.doPost(url, content);
     98     }
     99 
    100     private String doPost(URL url, String content) {
    101         long beginTime = System.currentTimeMillis();
    102         String respStr = StringUtils.EMPTY;
    103         try {
    104             logger.info(OPERATER_NAME + "开始post通信,目标host:" + url.toString());
    105             logger.info("通信内容:" + content);
    106             PostMethod post = new PostMethod(url.toString());
    107             RequestEntity requestEntity = new StringRequestEntity(content, "application/json;charse=UTF-8", UTF8);
    108             post.setRequestEntity(requestEntity);
    109             // 设置格式
    110             post.getParams().setContentCharset(UTF8);
    111 
    112             client.executeMethod(post);
    113             if (post.getStatusCode() == SUCCESS) {
    114                 respStr = post.getResponseBodyAsString();
    115             }
    116 
    117             logger.info(OPERATER_NAME + "通讯完成,返回码:" + post.getStatusCode());
    118             logger.info(OPERATER_NAME + "返回内容:" + post.getResponseBodyAsString());
    119             logger.info(OPERATER_NAME + "结束..返回结果:" + respStr);
    120             post.releaseConnection();
    121 
    122         } catch (Exception e) {
    123             logger.error(OPERATER_NAME, e);
    124         }
    125         long endTime = System.currentTimeMillis();
    126         logger.info(OPERATER_NAME + "共计耗时:" + (endTime - beginTime) + "ms");
    127         return respStr;
    128     }
    129     
    130 }

    jar依赖如图

    编写测试类测试:

    1  public static void main(String[] args) throws Exception {
    2         JSONObject json = new JSONObject();
    3         json.put("action", "test");
    4         URL url = new URL("http://localhost:8080/TPSServer/door.do");
    5         String resp = post(url, json.toString());
    6         System.out.println(resp);
    7     }

    控制台输出结果:

    1 2017-07-26 11:17:09 GMT+08:00 INFO  com.sunyard.util.HTTPUtils 106 doPost - 【HTTP操作】开始post通信,目标host:http://localhost:8080/TPSServer/door.do
    2 2017-07-26 11:17:09 GMT+08:00 INFO  com.sunyard.util.HTTPUtils 107 doPost - 通信内容:{"action":"test"}
    3 2017-07-26 11:17:10 GMT+08:00 INFO  com.sunyard.util.HTTPUtils 119 doPost - 【HTTP操作】通讯完成,返回码:200
    4 2017-07-26 11:17:10 GMT+08:00 INFO  com.sunyard.util.HTTPUtils 120 doPost - 【HTTP操作】返回内容:{"errorcode":"0","errormsg":"success"}
    5 2017-07-26 11:17:10 GMT+08:00 INFO  com.sunyard.util.HTTPUtils 121 doPost - 【HTTP操作】结束..返回结果:{"errorcode":"0","errormsg":"success"}
    6 2017-07-26 11:17:10 GMT+08:00 INFO  com.sunyard.util.HTTPUtils 128 doPost - 【HTTP操作】共计耗时:579ms
    7 {"errorcode":"0","errormsg":"success"}

    HttpClient工具包的使用,请大家参考。

  • 相关阅读:
    1.17 Python基础知识
    反射
    面向对象——类
    异常处理
    面向对象——静态方法、类方法、属性法法,其他特殊方法
    面向对象——继承
    question
    configparser模块
    hashlib模块
    shelve模块
  • 原文地址:https://www.cnblogs.com/yujiwei/p/7238613.html
Copyright © 2020-2023  润新知