java 如何获取重定向后的地址
  hAj4qcBP7pV1 2023年12月05日 22 0

Java如何获取重定向后的地址

在Java中,我们可以使用HttpURLConnection或者HttpClient来发送HTTP请求并获取重定向后的地址。

使用HttpURLConnection

HttpURLConnection是Java提供的用于发送HTTP请求的类,它也提供了获取重定向后的地址的方法。

import java.net.HttpURLConnection;
import java.net.URL;

public class RedirectExample {
    public static void main(String[] args) {
        try {
            URL url = new URL("
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setInstanceFollowRedirects(false);
  
            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_MOVED_TEMP || responseCode == HttpURLConnection.HTTP_MOVED_PERM) {
                String newUrl = connection.getHeaderField("Location");
                System.out.println("重定向后的地址:" + newUrl);
            } else {
                System.out.println("没有重定向");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上面的代码先创建一个URL对象,然后使用openConnection方法获取HttpURLConnection对象。接着,调用setInstanceFollowRedirects方法设置是否自动处理重定向,默认值为true,我们需要将其设置为false。然后发送HTTP请求并获取响应码,如果响应码为HTTP_MOVED_TEMP(301)或者HTTP_MOVED_PERM(302),说明发生了重定向,我们可以通过getHeaderField方法获取Location头字段的值,即重定向后的地址。

使用HttpClient

HttpClient是Apache提供的一个强大的HTTP客户端库,它也提供了获取重定向后的地址的方法。

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class RedirectExample {
    public static void main(String[] args) {
        try {
            HttpClient client = HttpClients.createDefault();
            HttpGet request = new HttpGet("
            request.setConfig(RequestConfig.custom().setRedirectsEnabled(false).build());

            HttpResponse response = client.execute(request);
            int responseCode = response.getStatusLine().getStatusCode();
            if (responseCode == HttpStatus.SC_MOVED_TEMP || responseCode == HttpStatus.SC_MOVED_PERMANENTLY) {
                Header[] headers = response.getHeaders("Location");
                if (headers.length > 0) {
                    String newUrl = headers[0].getValue();
                    System.out.println("重定向后的地址:" + newUrl);
                }
            } else {
                System.out.println("没有重定向");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上面的代码首先创建一个HttpClient对象,然后创建一个HttpGet对象并设置请求的URL。接着,调用setConfig方法设置是否自动处理重定向,默认值为true,我们需要将其设置为false。然后执行请求,获取响应对象。如果响应码为SC_MOVED_TEMP(302)或者SC_MOVED_PERMANENTLY(301),则说明发生了重定向,我们可以通过getHeaders方法获取Location头字段的值,即重定向后的地址。

综上所述,以上两种方法都可以用来获取重定向后的地址,具体选择哪种方法取决于你的项目需求和个人偏好。

journey
    title Java获取重定向后的地址
    section 使用HttpURLConnection
    section 使用HttpClient
pie
    title Java获取重定向后的地址所使用的工具
    "HttpURLConnection" : 50
    "HttpClient" : 50
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月05日 0

暂无评论

推荐阅读
hAj4qcBP7pV1