java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java HttpURLConnection使用

Java HttpURLConnection使用方法与实例演示分析

作者:goyeer

这篇文章主要介绍了Java HttpURLConnection使用方法与实例演示,HttpURLConnection一个抽象类是标准的JAVA接口,该类位于java.net包中,它提供了基本的URL请求,响应等功能,下面我们来深入看看

一、HttpURLConnection简述

HttpURLConnection一个抽象类是标准的JAVA接口,该类位于java.net包中,它提供了基本的URL请求,响应等功能。

HttpURLConnection是基于http协议的,支持GET、POST、PUT、DELETE等各种请求方式。如果使用HTTPS协议请求,可以使用它的子类HttpsURLConnection完成更安全的请求操作。

二、HttpURLConnection使用步骤

创建一个URL对象:

URL url=new URL(“接口地址”)

调用URL对象的openConnection()来获取HttpURLConnection对象实例;

HttpURLConnection connection= (HttpURLConnection) url.openConnection();

设置HTTP请求使用的方法:GET、POST或其他请求;

connection.setRequestMethod(“GET”);

设置连接超时,读取超时的毫秒数,以及服务器希望得到的一些消息头;

connection.setConnectTimeout(6*1000);

connection.setReadTimeout(6 * 1000);

调用getInputStream()方法获得服务器返回的输入流,然后输入流进行读取了;

InputStream in = connection.getInputStream();

最后调用disconnect()方法将HTTP连接关掉;

connection.disconnect();

三、HttpURLConnection使用的方法

设置连接参数方法

编号方法名说明
1setAllowUserInteraction如果为 true ,则在允许用户交互(例如弹出一个身份验证对话框)的上下文中对此 URL 进行检查。
2setDoInputURL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。
3setDoOutputURL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false
4setIfModifiedSince有些协议支持跳过对象获取,除非该对象在某个特定时间点之后又进行了修改
5setUseCaches如果为 true ,则只要有条件就允许协议使用缓存。
6setDefaultAllowUserInteraction默认值为 “sticky”,它是所有 URLConnection 的其中一种静态状态。此标志适用于下一个及后续创建的所有 URLConnection。
7setDefaultUseCaches将此 URLConnection useCaches 字段的值设置为指定的值。

设置请求头或响应体

编号方法说明
1setRequestProperty(key,value)设置一般请求属性。如果已存在具有该关键字的属性,则用新值改写其值。注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。
2addRequestProperty(key,value)添加由键值对指定的一般请求属性。此方法不会改写与相同键关联的现有值

发送URL请求

编号方法说明
1getOutputStream建立实际连接之后,就是发送请求,把请求参数传到服务器,这就需要使用outputStream把请求参数传给服务器

获取响应

编号方法说明
1getContent检索此 URL 连接的内容;此方法首先通过调用 getContentType 方法确定对象的内容类型;如果这是该应用程序第一次遇到的特定内容类型,则会创建适用于该类型的内容处理程序:如果该应用程序已使用 setContentHandlerFactory 方法建立了内容处理程序工厂实例,则调用此实例的 createContentHandler 方法,内容类型为其中的一个参数;结果为该内容类型的内容处理程序。如果尚未建立任何内容处理程序工厂,或者如果工厂的createContentHandler 方法返回 null`,则应用程序会加载以下名称的类
2getHeaderField返回第 n 个头字段的值。如果少于 n+1 个字段,则返回 null 。此方法可与 getHeaderFieldKey 方法配合使用,以迭代消息中的所有头
3getInputStream返回从此打开的连接读取的输入流。 在读取返回的输入流时,如果在数据可供读取之前达到读入超时时间,则会抛出 SocketTimeoutException。
4getResponseCode获取服务器的响应代码
5getResponseMessage获取服务器的响应消息
6getResponseMethod获取发送请求的方法

相应的信息头用以下方法获取

编码方法说明
1getContentEncoding返回 content-encoding 头字段的值
2getContentLength返回 content-length 头字段的值。
3getContentType返回 content-type 头字段的值。
4getDate返回 date 头字段的值。
5getExpiration返回 expires 头字段的值。

四、HttpURLConnection使用演示

Get方式

public void testDoGet(){
        String api="";
        HttpURLConnection connection = null;
        InputStream in=null;
        BufferedReader reader=null;
        try{
            //构造一个URL对象
            URL url = new URL(api);
            //获取URLConnection对象
            connection= (HttpURLConnection) url.openConnection();
            //getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,所以在开发中不调用connect()也可以)
            in = connection.getInputStream();
            //通过InputStreamReader将字节流转换成字符串,在通过BufferedReader将字符流转换成自带缓冲流
            reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
            StringBuilder sb = new StringBuilder();
            String line = null;
            //按行读取
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            String response= sb.toString();
            System.out.println(response);
        }catch (Exception exception){
            exception.printStackTrace();
        }finally {
            if (connection != null) {
                connection.disconnect();
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

POST方式

 public void testDoPost(){
        String apiUrl = "https://www.goyeer.com/api";
        String username  = "Goyeer";
        String password  = "123456";
        String tenantUrl = "";
        HttpURLConnection conn = null;
        OutputStream out = null;
        InputStream in = null;
        String idToken = null;
        try
        {
           // 构造一个URL对象
            URL url = new URL(apiUrl);
            // 获取URLConnection对象
            conn = (HttpURLConnection) url.openConnection();
            // 限制socket等待建立连接的时间,超时将会抛出java.net.SocketTimeoutException
            conn.setConnectTimeout(3000);
            // 限制输入流等待数据到达的时间,超时将会抛出java.net.SocketTimeoutException
            conn.setReadTimeout(3000);
            // 设定请求的方法为"POST",默认是GET
            conn.setRequestMethod("POST");
            // 设置传送的内容类型是json格式
            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
            // 接收的内容类型也是json格式
            conn.setRequestProperty("Accept", "application/json;charset=utf-8");
            // 设置是否从httpUrlConnection读入,默认情况下是true
            conn.setDoInput(true);
            // 由于URLConnection在默认的情况下不允许输出,所以在请求输出流之前必须调用setDoOutput(true)。为一个HTTP URL将doOutput设置为true时,请求方法将由GET变为POST
            conn.setDoOutput(true);
            // 是否使用缓存,Post方式不能使用缓存
            conn.setUseCaches(false);
            // 准备数据
            JSONObject json = new JSONObject();
            json.put("username", username);
            json.put("password", DigestUtils.md5Hex(password));
            json.put("tenantUrl", tenantUrl);
            // 返回一个OutputStream,可以用来写入数据传送给服务器
            out = conn.getOutputStream();
            // 将数据写入到输出流中
            out.write(json.toString().getBytes(StandardCharsets.UTF_8));
            // 刷新管道
            out.flush();
            // 建立连接
            conn.connect();
            // 判断数字响应码是否是200
            int responseCode = conn.getResponseCode();
            String result="";
            if (responseCode == 200) {
                // 获取输入流
                in = conn.getInputStream();
                // 获取返回的内容
                StringWriter sw = new StringWriter();
                InputStreamReader reader = new InputStreamReader(in, StandardCharsets.UTF_8);
                char[] buffer = new char[4096];
                for (int n = 0; -1 != (n = reader.read(buffer)); ) {
                    sw.write(buffer, 0, n);
                }
                result = sw.toString();
                System.out.println(result);
            }
        }catch (Exception exception){
            exception.printStackTrace();
        }finally {
            if (conn != null) {
                conn.disconnect();
            }
            if (out != null) {
                out.close();
            }
            if (in != null) {
                in.close();
            }
        }
    }

五、HttpURLConnection使用总结

到此这篇关于Java HttpURLConnection使用方法与实例演示分析的文章就介绍到这了,更多相关Java HttpURLConnection使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文