http请求-使用原生的HttpURLConnection

post请求实现: 

    /**
     * 根据需要发送post请求
     * @param headers 请求头
     * @param message 发送数据
     * @param urlPath 发送接口
     */
    public String senderPostMessage(Map<String,String> headers, String message, String urlPath){
        HttpURLConnection connection = null;
        InputStream in = null;
        OutputStream os = null;
        try{
            //根据url地址创建远程连接
            URL url = new URL(urlPath);
            //得到一个链接, 强转成httpURLConnection类
            connection = (HttpURLConnection) url.openConnection();
            /*
             * 链接方式选择,我们默认POST 从setRequestMethod方法可以有以下其中选择
             *  <UL>
             *   <LI>GET
             *   <LI>POST
             *   <LI>HEAD
             *   <LI>OPTIONS
             *   <LI>PUT
             *   <LI>DELETE
             *   <LI>TRACE
             *  </UL> are legal, subject to protocol restrictions.  The default
             *  method is GET.
             */
            connection.setRequestMethod("POST");
            //设置链接服务器的超时时间,当超过这个时间之后不在尝试链接 单位:毫秒
            connection.setConnectTimeout(15000);
            /*
             * 设置远程返回的时间:即当链接到远程主机之后 到 发送方得到可读取的数据的时长, 超过设置时间则不在等待返回。抛出:
             * java.net.SocketTimeoutException。超时为零被解释为无限超时
             * 单位 :毫秒
             */
            connection.setReadTimeout(6000);
            /*
             * 当向远程服务器传送数据/写数据时,需要设置为true, 默认为false
             */
            connection.setDoOutput(true);
            /*
             *  当前向远程服务读取数据时,设置为true,默认为true,可以不设置
             */
            connection.setDoInput(true);
            /*
             * 设置请求头 可以设置自定义的, 也可以设置一些公认的参数
             * 常用的有 :  传入参数的格式:Content-Type   可以是已经存在的,也可以是自定义的
             *             设置鉴权信息:Authorization
             */
            for(Map.Entry<String, String> entry : headers.entrySet()){
                connection.setRequestProperty(entry.getKey(), entry.getValue());
            }

            //获取一个输出流,用于向远程主机发送数据
            os = connection.getOutputStream();
            //写入要发送的数据,以字节的方式
            os.write(message.getBytes("utf-8"));

            //获取输入流,用于获取远程主机返回结果
            if(connection.getResponseCode() == 200){
                in =  connection.getInputStream();
                /*
                 * 将返回数据转换成字符串
                 */
                BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
                StringBuffer sbf = new StringBuffer();
                String temp = null;
                // 循环遍历一行一行读取数据
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                String result = sbf.toString();
                return result;
            } else{
                System.out.println(connection.getResponseCode() + "------" +connection.getResponseMessage());
            }

        } catch (Exception e){
            e.printStackTrace();
            System.out.println("失败:" + e.getMessage());
        } finally {
            //一定要记得关闭流
            if(in != null){
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(os != null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //断开连接
            if(connection != null){
                connection.disconnect();
            }
        }
        return null;
    }

get请求:

/**
     * 根据需要发送post请求
     * @param headers 请求头
     * @param message 发送数据
     * @param urlPath 发送接口
     */
    public String sendGetMessage(Map<String,String> headers, String message, String urlPath){
        HttpURLConnection connection = null;
        InputStream in = null;
        OutputStream os = null;
        try{
            //根据url地址创建远程连接
            URL url = new URL(urlPath);
            //得到一个链接, 强转成httpURLConnection类
            connection = (HttpURLConnection) url.openConnection();
            /*
             * 链接方式选择,我们默认GET 从setRequestMethod方法可以有以下其中选择
             */
            connection.setRequestMethod("GET");
            //设置链接服务器的超时时间,当超过这个时间之后不在尝试链接 单位:毫秒
            connection.setConnectTimeout(15000);
            /*
             * 设置远程返回的时间:即当链接到远程主机之后 到 发送方得到可读取的数据的时长, 超过设置时间则不在等待返回。抛出:
             * java.net.SocketTimeoutException。超时为零被解释为无限超时
             * 单位 :毫秒
             */
            connection.setReadTimeout(6000);
            /*
             *  当前向远程服务读取数据时,设置为true,默认为true,可以不设置
             */
            connection.setDoInput(true);
            /*
             * 设置请求头 可以设置自定义的, 也可以设置一些公认的参数
             * 常用的有 :  传入参数的格式:Content-Type   可以是已经存在的,也可以是自定义的
             *             设置鉴权信息:Authorization
             */
            for(Map.Entry<String, String> entry : headers.entrySet()){
                connection.setRequestProperty(entry.getKey(), entry.getValue());
            }

            //获取输入流,用于获取远程主机返回结果
            if(connection.getResponseCode() == 200){
                in =  connection.getInputStream();

                /*
                 * 将返回数据转换成字符串
                 */
                BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));

                StringBuffer sbf = new StringBuffer();
                String temp = null;
                // 循环遍历一行一行读取数据
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                String result = sbf.toString();
                System.out.println(result);
                return result;
            } else {
                System.out.println("接口返回" +connection.getResponseCode());
            }
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            //断开连接
            if(connection != null){
                connection.disconnect();
            }
            //一定要记得关闭流
            if(in != null){
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(os != null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值