文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在 Java 中使用 httpurlconnection?(Java中的httpurlconnection怎么使用)

极客之心

极客之心

2024-12-22 18:57

关注

在 Java 开发中,HttpURLConnection是一个用于发送 HTTP 请求和接收 HTTP 响应的类。它提供了一种简单而灵活的方式来与 Web 服务器进行通信。下面将详细介绍如何在 Java 中使用HttpURLConnection

一、创建 HttpURLConnection 对象

要使用HttpURLConnection,首先需要创建一个URL对象,然后通过URL对象的openConnection()方法获取一个HttpURLConnection对象。以下是创建HttpURLConnection对象的代码示例:

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpURLConnectionExample {
    public static void main(String[] args) {
        try {
            // 创建 URL 对象
            URL url = new URL("http://www.example.com");

            // 通过 URL 对象获取 HttpURLConnection 对象
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置请求方法,默认为 GET
            connection.setRequestMethod("GET");

            // 设置连接超时时间(单位:毫秒)
            connection.setConnectTimeout(5000);

            // 设置读取超时时间(单位:毫秒)
            connection.setReadTimeout(5000);

            // 发送请求并获取响应码
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);

            // 获取响应消息
            String responseMessage = connection.getResponseMessage();
            System.out.println("Response Message: " + responseMessage);

            // 读取响应内容
            // 可以根据需要选择合适的读取方式,如 InputStream、Reader 等
            // 这里以读取 InputStream 为例
            java.io.InputStream inputStream = connection.getInputStream();
            java.util.Scanner scanner = new java.util.Scanner(inputStream).useDelimiter("\\A");
            String response = scanner.hasNext()? scanner.next() : "";
            System.out.println("Response Content: " + response);

            // 关闭连接
            connection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,首先创建了一个URL对象,指定了要连接的 URL。然后通过openConnection()方法获取HttpURLConnection对象,并设置了请求方法为GET,连接超时时间和读取超时时间。接下来,使用getResponseCode()getResponseMessage()方法获取响应码和响应消息,并使用getInputStream()方法获取响应内容的输入流。最后,读取输入流中的内容并打印出来,最后关闭连接。

二、设置请求参数和请求头

除了设置请求方法和超时时间外,还可以设置请求参数和请求头。以下是设置请求参数和请求头的代码示例:

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Set;
import java.util.HashMap;

public class HttpURLConnectionExample {
    public static void main(String[] args) {
        try {
            // 创建 URL 对象
            URL url = new URL("http://www.example.com");

            // 通过 URL 对象获取 HttpURLConnection 对象
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置请求方法为 POST
            connection.setRequestMethod("POST");

            // 设置连接超时时间(单位:毫秒)
            connection.setConnectTimeout(5000);

            // 设置读取超时时间(单位:毫秒)
            connection.setReadTimeout(5000);

            // 设置请求参数
            Map<String, String> params = new HashMap<>();
            params.put("param1", "value1");
            params.put("param2", "value2");
            String queryString = buildQueryString(params);
            byte[] postData = queryString.getBytes("UTF-8");

            // 设置请求头
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.setRequestProperty("Content-Length", String.valueOf(postData.length));

            // 发送请求
            connection.setDoOutput(true);
            OutputStream outputStream = connection.getOutputStream();
            outputStream.write(postData);
            outputStream.flush();

            // 获取响应码和响应消息
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);
            String responseMessage = connection.getResponseMessage();
            System.out.println("Response Message: " + responseMessage);

            // 读取响应内容
            InputStream inputStream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder responseBuilder = new StringBuilder();
            String line;
            while ((line = reader.readLine())!= null) {
                responseBuilder.append(line);
            }
            reader.close();
            String response = responseBuilder.toString();
            System.out.println("Response Content: " + response);

            // 关闭连接
            connection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String buildQueryString(Map<String, String> params) {
        StringBuilder query = new StringBuilder();
        boolean first = true;
        for (Map.Entry<String, String> entry : params.entrySet()) {
            if (first) {
                first = false;
            } else {
                query.append("&");
            }
            query.append(entry.getKey()).append("=").append(entry.getValue());
        }
        return query.toString();
    }
}

在上述代码中,首先创建了一个URL对象和一个HttpURLConnection对象,并设置了请求方法为POST。然后创建了一个Map对象用于存储请求参数,并使用buildQueryString()方法将请求参数转换为查询字符串。接着设置了请求头的Content-TypeContent-Length属性。然后通过setDoOutput(true)方法打开输出流,并将请求参数写入输出流中。最后获取响应码、响应消息和响应内容,并打印出来。

三、处理响应数据

获取到响应数据后,可以根据需要进行处理。通常情况下,响应数据可以是 JSON 格式、XML 格式或纯文本格式。以下是处理不同格式响应数据的示例代码:

  1. 处理 JSON 格式响应数据:
import org.json.JSONObject;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

public class HttpURLConnectionExample {
    public static void main(String[] args) {
        try {
            // 创建 URL 对象
            URL url = new URL("http://www.example.com");

            // 通过 URL 对象获取 HttpURLConnection 对象
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置请求方法为 GET
            connection.setRequestMethod("GET");

            // 设置连接超时时间(单位:毫秒)
            connection.setConnectTimeout(5000);

            // 设置读取超时时间(单位:毫秒)
            connection.setReadTimeout(5000);

            // 发送请求并获取响应码
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);

            // 获取响应消息
            String responseMessage = connection.getResponseMessage();
            System.out.println("Response Message: " + responseMessage);

            // 读取响应内容
            InputStream inputStream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder responseBuilder = new StringBuilder();
            String line;
            while ((line = reader.readLine())!= null) {
                responseBuilder.append(line);
            }
            reader.close();
            String response = responseBuilder.toString();
            System.out.println("Response Content: " + response);

            // 处理 JSON 数据
            JSonObject json = new JSonObject(response);
            String name = json.getString("name");
            int age = json.getInt("age");
            System.out.println("Name: " + name);
            System.out.println("Age: " + age);

            // 关闭连接
            connection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,首先创建了一个URL对象和一个HttpURLConnection对象,并设置了请求方法为GET。然后发送请求并获取响应码、响应消息和响应内容。接着使用JSONObject类将响应内容解析为 JSON 对象,并获取其中的nameage字段的值。最后关闭连接。

  1. 处理 XML 格式响应数据:
import javax.xml.parsers.documentBuilder;
import javax.xml.parsers.documentBuilderFactory;
import org.w3c.dom.document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

public class HttpURLConnectionExample {
    public static void main(String[] args) {
        try {
            // 创建 URL 对象
            URL url = new URL("http://www.example.com");

            // 通过 URL 对象获取 HttpURLConnection 对象
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置请求方法为 GET
            connection.setRequestMethod("GET");

            // 设置连接超时时间(单位:毫秒)
            connection.setConnectTimeout(5000);

            // 设置读取超时时间(单位:毫秒)
            connection.setReadTimeout(5000);

            // 发送请求并获取响应码
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);

            // 获取响应消息
            String responseMessage = connection.getResponseMessage();
            System.out.println("Response Message: " + responseMessage);

            // 读取响应内容
            InputStream inputStream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder responseBuilder = new StringBuilder();
            String line;
            while ((line = reader.readLine())!= null) {
                responseBuilder.append(line);
            }
            reader.close();
            String response = responseBuilder.toString();
            System.out.println("Response Content: " + response);

            // 处理 XML 数据
            documentBuilderFactory factory = documentBuilderFactory.newInstance();
            documentBuilder builder = factory.newdocumentBuilder();
            document document = builder.parse(new java.io.StringReader(response));
            document.getdocumentElement().normalize();

            NodeList nodeList = document.getElementsByTagName("person");
            for (int i = 0; i < nodeList.getLength(); i++) {
                Node node = nodeList.item(i);
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    Element element = (Element) node;
                    String name = element.getElementsByTagName("name").item(0).getTextContent();
                    int age = Integer.parseInt(element.getElementsByTagName("age").item(0).getTextContent());
                    System.out.println("Name: " + name);
                    System.out.println("Age: " + age);
                }
            }

            // 关闭连接
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,首先创建了一个URL对象和一个HttpURLConnection对象,并设置了请求方法为GET。然后发送请求并获取响应码、响应消息和响应内容。接着使用documentBuilderFactorydocumentBuilder解析响应内容为XML文档,并获取person元素的子元素nameage的值。最后关闭连接。

  1. 处理纯文本格式响应数据:
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

public class HttpURLConnectionExample {
    public static void main(String[] args) {
        try {
            // 创建 URL 对象
            URL url = new URL("http://www.example.com");

            // 通过 URL 对象获取 HttpURLConnection 对象
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置请求方法为 GET
            connection.setRequestMethod("GET");

            // 设置连接超时时间(单位:毫秒)
            connection.setConnectTimeout(5000);

            // 设置读取超时时间(单位:毫秒)
            connection.setReadTimeout(5000);

            // 发送请求并获取响应码
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);

            // 获取响应消息
            String responseMessage = connection.getResponseMessage();
            System.out.println("Response Message: " + responseMessage);

            // 读取响应内容
            InputStream inputStream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder responseBuilder = new StringBuilder();
            String line;
            while ((line = reader.readLine())!= null) {
                responseBuilder.append(line);
            }
            reader.close();
            String response = responseBuilder.toString();
            System.out.println("Response Content: " + response);

            // 处理纯文本数据
            System.out.println("Response Content (Text): " + response);

            // 关闭连接
            connection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,首先创建了一个URL对象和一个HttpURLConnection对象,并设置了请求方法为GET。然后发送请求并获取响应码、响应消息和响应内容。接着直接打印响应内容作为纯文本数据。最后关闭连接。

总之,HttpURLConnection是 Java 中用于发送 HTTP 请求和接收 HTTP 响应的类。通过创建HttpURLConnection对象、设置请求参数和请求头、发送请求和处理响应数据,可以方便地与 Web 服务器进行通信。在实际应用中,可以根据需要选择合适的方式来处理不同格式的响应数据。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯