📜  Java – 使用 URLConnection 类从 URL 中读取(1)

📅  最后修改于: 2023-12-03 14:42:17.436000             🧑  作者: Mango

Java - 使用 URLConnection 类从 URL 中读取

介绍

Java 中的 URLConnection 类是一个用于从 URL 中读取数据的类。它可以让程序员通过 URL 来进行数据的读取和写入操作,例如:

  • 读取 URL 中的文本内容
  • 读取 URL 中的二进制文件
  • 向 URL 中写入数据

本篇文章将介绍如何使用 URLConnection 类来读取 URL 中的内容。

使用URLConnection 读取URL内容

下面是一个使用 URLConnection 类读取 URL 内容的示例代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class URLConnectionDemo {

    public static void main(String[] args) throws IOException {
        URL url = new URL("https://www.example.com/");
        URLConnection urlConnection = url.openConnection();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }
        bufferedReader.close();
    }
}

在这个示例中,我们首先创建了一个 URL 对象,然后使用 openConnection() 方法创建一个 URLConnection 对象。接下来,我们使用 getInputStream() 方法获取 URL 的输入流,并使用 BufferedReader 对象逐行读取其中的内容,最后关闭输入流。

可能遇到的问题

在使用 URLConnection 时,可能会遇到以下问题:

1. URL 包含密码

如果访问的 URL 包含密码,需要使用 URLConnectionsetRequestProperty() 方法来设置 Authorization 请求头信息:

String authString = username + ":" + password;
byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes());
String authStringEnc = new String(authEncBytes);
urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);

其中,usernamepassword 分别为 URL 的用户名和密码。

2. URL 使用 HTTPS

如果访问的 URL 使用 HTTPS 协议,需要在代码中添加以下两行代码来信任所有证书:

TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return null;
    }
    public void checkClientTrusted(X509Certificate[] certs, String authType) {
    }
    public void checkServerTrusted(X509Certificate[] certs, String authType) {
    }
} };
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
3. URL 包含 cookie

如果访问的 URL 包含 cookie,需要使用 URLConnectionsetRequestProperty() 方法来设置 Cookie 请求头信息:

urlConnection.setRequestProperty("Cookie", "name=value");

其中,namevalue 分别为 cookie 的名称和值。

结论

URLConnection 类提供了方便的方式来访问 URL 中的数据。使用它可以读取文本、二进制文件等内容,也可以向 URL 中写入数据。在操作过程中,需要注意 URL 中可能包含的密码、HTTPS 等情况,需要做好相应的处理。