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