HttpURLConnection发送GET、POST请求

/**
* GET请求
*
* @param requestUrl 请求地址
* @return
*/
public String get(String requestUrl) {

  HttpURLConnection connection = null;
  InputStream is = null;
  BufferedReader br = null;
  String result = null;

  try {
      /** 创建远程url连接对象 */
      URL url = new URL(requestUrl);

      /** 通过远程url对象打开一个连接,强制转换为HttpUrlConnection类型 */
      connection = (HttpURLConnection) url.openConnection();

      /** 设置连接方式:GET */
      connection.setRequestMethod("GET");
      /** 设置连接主机服务器超时时间:15000毫秒 */
      connection.setConnectTimeout(15000);
      /** 设置读取远程返回的数据时间:60000毫秒 */
      connection.setReadTimeout(60000);

      /** 设置通用的请求属性 */
      connection.setRequestProperty("accept", "*/*");
      connection.setRequestProperty("connection", "Keep-Alive");
      connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
      // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式
      connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

      /** 发送GET方式请求,使用connet方法建立和远程资源之间的实际连接即可 */
      connection.connect();

      /*-------------------------->*/
      /** 获取所有相应头字段 */
      Map<String, List<String>> map = connection.getHeaderFields();
      /** 遍历响应头字段 */
      for (String key : map.keySet()) {
      System.out.println(key + "---------->" + map.get(key));
      }
      /* <-------------------------- */

      /** 请求成功:返回码为200 */
      if (connection.getResponseCode() == 200) {
        /** 通过connection连接,获取输入流 */
        is = connection.getInputStream();
        /** 封装输入流is,并指定字符集 */
        br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

        /** 存放数据 */
        StringBuffer sbf = new StringBuffer();
        String line = null;
        while ((line = br.readLine()) != null) {
          sbf.append(line);
          sbf.append("\r\n");
        }
        result = sbf.toString();
      }

    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      /** 关闭资源 */
      try {

        if (null != br) {
          br.close();
        }

        if (null != is) {
          is.close();
        }

      } catch (Exception e) {
        e.printStackTrace();
      }

      /** 关闭远程连接 */
      // 断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
      // 固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些
      connection.disconnect();

      System.out.println("--------->>> GET request end <<<----------");
    }

    return result;
  }

/**
* POST请求
*
* @param requestUrl 请求地址
* @param param 请求数据
* @return
*/
public String post(String requestUrl, String param) {

  HttpURLConnection connection = null;
  InputStream is = null;
  OutputStream os = null;
  BufferedReader br = null;
  String result = null;

  try {
      /** 创建远程url连接对象 */
      URL url = new URL(requestUrl);

      /** 通过远程url对象打开一个连接,强制转换为HttpUrlConnection类型 */
      connection = (HttpURLConnection) url.openConnection();

      /** 设置连接方式:POST */
      connection.setRequestMethod("POST");
      /** 设置连接主机服务器超时时间:15000毫秒 */
      connection.setConnectTimeout(15000);
      /** 设置读取远程返回的数据时间:60000毫秒 */
      connection.setReadTimeout(60000);

      /** 设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个 */
      // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
      connection.setDoOutput(true);
      // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无
      connection.setDoInput(true);

      /** 设置通用的请求属性 */
      connection.setRequestProperty("accept", "*/*");
      connection.setRequestProperty("connection", "Keep-Alive");
      connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
      // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式
      connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

      /** 通过连接对象获取一个输出流 */
      os = connection.getOutputStream();
      /** 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的 */
      // 若使用os.print(param);则需要释放缓存:os.flush();即使用字符流输出需要释放缓存,字节流则不需要
      if(param != null && param.length() > 0) {
        os.write(param.getBytes());
      }

      /** 请求成功:返回码为200 */
      if (connection.getResponseCode() == 200) {
        /** 通过连接对象获取一个输入流,向远程读取 */
        is = connection.getInputStream();
        /** 封装输入流is,并指定字符集 */
        br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

        /** 存放数据 */
        StringBuffer sbf = new StringBuffer();
        String line = null;
        while ((line = br.readLine()) != null) {
          sbf.append(line);
          sbf.append("\r\n");
        }
        result = sbf.toString();
      }

    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      /** 关闭资源 */
      try {

        if (null != br) {
          br.close();
        }

        if (null != is) {
            is.close();
        }

        if (null != os) {
          os.close();
        }

      } catch (Exception e) {
        e.printStackTrace();
      }

      /** 关闭远程连接 */
      // 断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
      // 固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些
      connection.disconnect();

      System.out.println("--------->>> POST request end <<<----------");
    }

    return result;
  }

参考:https://blog.csdn.net/u012513972/article/details/79569888

HttpURLConnection发送GET、POST请求的更多相关文章

  1. HttpUrlConnection发送url请求(后台springmvc)

    1.HttpURLConnection发送url请求 public class JavaRequest { private static final String BASE_URL = "h ...

  2. HttpURLConnection发送POST请求(可包含文件)

    import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io. ...

  3. Http学习之使用HttpURLConnection发送post和get请求(3)

    使用HttpURLConnection发送post和get请求 但我们常常会碰到这样一种情况: 通过HttpURLConnection来模拟模拟用户登录Web服务器,服务器使用cookie进行用户认证 ...

  4. Http学习之使用HttpURLConnection发送post和get请求(2)

    接上节Http学习之使用HttpURLConnection发送post和get请求 本节深入学习post请求. 上 节说道,post请求的OutputStream实际上不是网络流,而是写入内存,在ge ...

  5. HttpURLConnection发送请求

    每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络.请求后在 HttpURLConnection 的 InputStrea ...

  6. 【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法(一)

    Java原生的API可用于发送HTTP请求 即java.net.URL.java.net.URLConnection,JDK自带的类: 1.通过统一资源定位器(java.net.URL)获取连接器(j ...

  7. HttpURLConnection 发送http请求帮助类

    java 利用HttpURLConnection 发送http请求 提供GET / POST /上传文件/下载文件 功能 import java.io.*; import java.net.*; im ...

  8. 谈谈Java利用原始HttpURLConnection发送POST数据

    这篇文章主要给大家介绍java利用原始httpUrlConnection发送post数据,设计到httpUrlConnection类的相关知识,感兴趣的朋友跟着小编一起学习吧 URLConnectio ...

  9. JAVA使用原始HttpURLConnection发送POST数据

    package com.newflypig.demo; /** * 使用jdk自带的HttpURLConnection向URL发送POST请求并输出响应结果 * 参数使用流传递,并且硬编码为字符串&q ...

随机推荐

  1. 我读《大数据时代的IT架构设计》

    架构设计是一门艺术,对架构的掌握要通过多看,多学,多交流,多积累,从实战架构上总能吸收到很好的营养,这边书虽然 (一).hadoop技术处理电信行业的上网日志 根据上网的url或未知url爬取内容,进 ...

  2. DIV+CSS布局时, DIV的高度和宽度特性

    这个没有特别的做要求,你要根据你自己的页面整体布局来设置,还有根据div的特性来设置,div默认情况是宽度最大化(100%).高度最小化,高度随着内容自动伸展: 一般情况做网页的话,大部分都是固定了总 ...

  3. Web Api 中返回JSON的正确做法(转)

    出处:http://www.cnblogs.com/acles/archive/2013/06/21/3147667.html 在使用Web Api的时候,有时候只想返回JSON:实现这一功能有多种方 ...

  4. list和数组排序(冒泡)

    package cn.test.bubble; import java.util.ArrayList; import java.util.Arrays; import java.util.List; ...

  5. .NET基础 (11)类型的基类System.Object

    类型的基类System.Object1 是否存在不继承自System.Object类型的类2 在System.Object中定义的三个比较方法有何异同3 如何重写GetHashCode方法 类型的基类 ...

  6. poj2115 Looooops 扩展欧几里德的应用

    好开心又做出一道,看样子做数论一定要先看书,认认真真仔仔细细的看一下各种重要的性质 及其用途,然后第一次接触的题目 边想边看别人的怎么做的,这样做出第一道题目后,后面的题目就完全可以自己思考啦 设要+ ...

  7. Kubernetes 自动伸缩 auto-scaling

    使用 Kubernetes 的客户能够迅速响应终端用户的请求,交付软件也比以往更快.但是,当你的服务增长速度比预期更快时,计算资源不够时,该怎么处理呢? 此时可以很自豪地说: Kubernetes 1 ...

  8. C#泛型使用小记

    最近C#的泛型使用频次略多,特在此记下一个印象深刻的. 情景如下, 基类BaseClass 有一系列的子类 SubClass1, SubClass2, SubClass3... 且其构造函数的参数较多 ...

  9. 【node错误】/usr/bin/env: node: No such file or directory

    背景 安装了node后,执行npm run xxx的命令的时候,报错,提示如下: /usr/bin/env: node: No such file or directory 步骤 1. 什么玩意,执行 ...

  10. 目前主流的四大浏览器内核Trident、Gecko、WebKit以及Presto

    “浏览器内核”主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎,渲染引 ...