Java重定向添加header

在编写Java程序时,经常会遇到需要发送HTTP请求并处理返回结果的情况。有时,我们需要在发送请求时添加一些自定义的header信息,以便服务器能正确处理请求。本文将介绍如何在Java中进行重定向并添加header信息的方法。

在Java中,我们可以使用HttpURLConnection类来发送HTTP请求。该类提供了一个方便的API来处理网络请求,并支持重定向功能。下面是一个简单的示例代码,演示了如何发送一个GET请求并重定向到目标网址:

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

public class HttpRedirectExample {
    public static void main(String[] args) throws Exception {
        String url = "
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

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

        // 添加自定义的header信息
        con.setRequestProperty("User-Agent", "Mozilla/5.0");

        // 获取重定向后的URL
        int responseCode = con.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_MOVED_TEMP
                || responseCode == HttpURLConnection.HTTP_MOVED_PERM
                || responseCode == HttpURLConnection.HTTP_SEE_OTHER) {
            String redirectUrl = con.getHeaderField("Location");
            System.out.println("Redirected to: " + redirectUrl);
        }

        // 读取服务器返回的内容
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuilder response = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        // 打印返回结果
        System.out.println(response.toString());
    }
}

在上面的示例代码中,我们首先指定了目标网址,然后创建了一个URL对象。通过调用URL对象的openConnection()方法,我们获得了一个HttpURLConnection对象。接下来,我们设置请求方法为GET,并添加了一个自定义的header信息,这里我们设置了"User-Agent"为"Mozilla/5.0"。然后,我们发送请求并获取重定向后的URL,如果返回的状态码是301、302或303,说明发生了重定向,并且通过getHeaderField("Location")方法获取重定向后的URL。最后,我们读取服务器返回的内容,并打印出来。

需要注意的是,如果目标网址是https协议的,我们需要导入javax.net.ssl包,并使用HttpsURLConnection类来发送请求。示例代码如下:

import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class HttpsRedirectExample {
    public static void main(String[] args) throws Exception {
        String url = "
        URL obj = new URL(url);
        HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

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

        // 添加自定义的header信息
        con.setRequestProperty("User-Agent", "Mozilla/5.0");

        // 获取重定向后的URL
        int responseCode = con.getResponseCode();
        if (responseCode == HttpsURLConnection.HTTP_MOVED_TEMP
                || responseCode == HttpsURLConnection.HTTP_MOVED_PERM
                || responseCode == HttpsURLConnection.HTTP_SEE_OTHER) {
            String redirectUrl = con.getHeaderField("Location");
            System.out.println("Redirected to: " + redirectUrl);
        }

        // 读取服务器返回的内容
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuilder response = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        // 打印返回结果
        System.out.println(response.toString());
    }
}

上述示例代码中,唯一的区别是导入了HttpsURLConnection类,并使用该类来创建连接对象。

总结一下,通过使用HttpURLConnection类(或HttpsURLConnection类),我们可以发送HTTP请求并获取服务器返回的结果,同时也支持重定向功能。在发送请求时,我们可以添加自定义的header信息,以便服务器能正确处理请求。希望本文对你理解Java中重定向并添加header信息有所帮助。

参考文献

  • [Java URLConnection Example](