zoukankan      html  css  js  c++  java
  • java发送http get请求的两种方式

      长话短说,废话不说

      一、第一种方式,通过HttpClient方式,代码如下:

    public static String httpGet(String url, String charset)
          throws HttpException, IOException {
       String json = null;
       HttpGet httpGet = new HttpGet();
       // 设置参数
       try {
          httpGet.setURI(new URI(url));
       } catch (URISyntaxException e) {
          throw new HttpException("请求url格式错误。"+e.getMessage());
       }
       // 发送请求
       HttpResponse httpResponse = client.execute(httpGet);
       // 获取返回的数据
       HttpEntity entity = httpResponse.getEntity();
       byte[] body = EntityUtils.toByteArray(entity);
       StatusLine sL = httpResponse.getStatusLine();
       int statusCode = sL.getStatusCode();
       if (statusCode == 200) {
          json = new String(body, charset);
          entity.consumeContent();
       } else {
          throw new HttpException("statusCode="+statusCode);
       }
       return json;
    }

      二、第二种方式,通过流的形式,贴代码:

      

        /**
        * 发送http get请求
        * 
        * @param getUrl
        * @return
        */
       public String sendGetRequest(String getUrl)
       {
          StringBuffer sb = new StringBuffer();
          InputStreamReader isr = null;
          BufferedReader br = null;
          try
          {
             URL url = new URL(getUrl);
             URLConnection urlConnection = url.openConnection();
             urlConnection.setAllowUserInteraction(false);
             isr = new InputStreamReader(url.openStream());
             br = new BufferedReader(isr);
             String line;
             while ((line = br.readLine()) != null)
             {
                sb.append(line);
             }
          }
          catch (IOException e)
          {
             e.printStackTrace();
          }
          finally
          {
             fileOperator.closeResources(isr, br);
          }
          return sb.toString();
       }
    }

      这两种实现方式不同,怎么使用看个人喜好吧,不过我在项目开发过程中,使用流的方式部署在预发机(linux机器)上会出现发送请求返回null的情况,但是本地windows却正常访问,而且,换另外一台预发机也能正常获取数据,目前还没有研究出个所以然。。。

    补充:问题找到原因了,因为公司不管是测试环境机器还是正式环境机器,访问公网都是要权限审批的,因此当我去请求乐视时没有访问api.letvcloud.com公网的权限,权限开通后,问题解决,一切正常

      

      

  • 相关阅读:
    第三十八条:检查参数的有效性
    第二十九条:优先考虑类型安全的异构容器
    第二十八条:利用有限制通配符来提升API的灵活性
    C# 利用第三方SharpZipLib进行ZIP压缩
    无法解决 equal to 操作中 "Chinese_PRC_CI_AS_WS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突
    使用EasyUI的treegrid犯的个低级错误
    Js千位分隔符
    Google Chrom浏览器默认只能显示字体大小大于等于12px
    Asp.Net2.0开发小问题汇总
    Oracle dbms_output.put_line长度限制问题
  • 原文地址:https://www.cnblogs.com/xiaoming0601/p/6904664.html
Copyright © 2011-2022 走看看