zoukankan      html  css  js  c++  java
  • HttpClientUtil [使用apache httpclient模拟http请求]

    基于httpclient-4.5.2

    模拟http请求 以get/post方式发送json请求,并获取服务器返回的json

    ---------------------------------------------------------------

    import java.io.IOException;
    
    import net.sf.json.JSONObject;
    
    import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
    import org.apache.commons.httpclient.Header;
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpException;
    import org.apache.commons.httpclient.HttpStatus;
    import org.apache.commons.httpclient.methods.GetMethod;
    import org.apache.commons.httpclient.params.HttpMethodParams;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    
    /**
     * 
     */
    public class HttpClientUtil {
    
      public static void main(String arg[]) throws Exception {
        String url = "http://IP/getReport";
        JSONObject params = new JSONObject();
        params.put("workNumber", "2232workNumber");
        String ret = doPost(url, params).toString();
        System.out.println("ret=   "+ret);
      }
    
      /**
       httpClient的get请求方式2
       * @return
       * @throws Exception
       */
      public static String doGet(String url, String charset)
          throws Exception {
        /*
         * 使用 GetMethod 来访问一个 URL 对应的网页,
         * 实现步骤: 
         * 1:生成一个 HttpClinet 对象并设置相应的参数。
         * 2:生成一个 GetMethod 对象并设置响应的参数。 
         * 3:用 HttpClinet 生成的对象来执行 GetMethod 生成的Get方法。 
         * 4:处理响应状态码。 
         * 5:若响应正常,处理 HTTP 响应内容。 
         * 6:释放连接。
         */
        /* 1 生成 HttpClinet 对象并设置参数 */
        HttpClient httpClient = new HttpClient();
        // 设置 Http 连接超时为5秒
        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
        /* 2 生成 GetMethod 对象并设置参数 */
        GetMethod getMethod = new GetMethod(url);
        // 设置 get 请求超时为 5 秒
        getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);
        // 设置请求重试处理,用的是默认的重试处理:请求三次
        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,    new DefaultHttpMethodRetryHandler());
        String response = "";
        /* 3 执行 HTTP GET 请求 */
        try {
          int statusCode = httpClient.executeMethod(getMethod);
          /* 4 判断访问的状态码 */
          if (statusCode != HttpStatus.SC_OK) {
            System.err.println("请求出错: "+ getMethod.getStatusLine());
          }
          /* 5 处理 HTTP 响应内容 */
          // HTTP响应头部信息,这里简单打印
          Header[] headers = getMethod.getResponseHeaders();
          for (Header h : headers)
            System.out.println(h.getName() + "------------ " + h.getValue());
          // 读取 HTTP 响应内容,这里简单打印网页内容
          byte[] responseBody = getMethod.getResponseBody();// 读取为字节数组
          response = new String(responseBody, charset);
          System.out.println("----------response:" + response);
          // 读取为 InputStream,在网页内容数据量大时候推荐使用
          // InputStream response = getMethod.getResponseBodyAsStream();
        } catch (HttpException e) {
          // 发生致命的异常,可能是协议不对或者返回的内容有问题
          System.out.println("请检查输入的URL!");
          e.printStackTrace();
        } catch (IOException e) {
          // 发生网络异常
          System.out.println("发生网络异常!");
          e.printStackTrace();
        } finally {
          /* 6 .释放连接 */
          getMethod.releaseConnection();
        }
        return response;
      }
    
      /**
       * post请求
       * @param url
       * @param json
       * @return
       */
      
      public static JSONObject doPost(String url,JSONObject json){
        DefaultHttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(url);
        JSONObject response = null;
        try {
          StringEntity s = new StringEntity(json.toString());
          s.setContentEncoding("UTF-8");
          s.setContentType("application/json");//发送json数据需要设置contentType
          post.setEntity(s);
          HttpResponse res = client.execute(post);
          if(res.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
            HttpEntity entity = res.getEntity();
            String result = EntityUtils.toString(res.getEntity());// 返回json格式:
            response = JSONObject.fromObject(result);
          }
        } catch (Exception e) {
          throw new RuntimeException(e);
        }
        return response;
      }
    }
  • 相关阅读:
    2、容器初探
    3、二叉树:先序,中序,后序循环遍历详解
    Hebbian Learning Rule
    论文笔记 Weakly-Supervised Spatial Context Networks
    在Caffe添加Python layer详细步骤
    论文笔记 Learning to Compare Image Patches via Convolutional Neural Networks
    Deconvolution 反卷积理解
    论文笔记 Feature Pyramid Networks for Object Detection
    Caffe2 初识
    论文笔记 Densely Connected Convolutional Networks
  • 原文地址:https://www.cnblogs.com/redcoatjk/p/5864752.html
Copyright © 2011-2022 走看看