Java “空白”;地点“;但重定向发生在IE中
我正在尝试使用HttpURLCONNECTION对象访问URL,但重定向似乎没有被识别,因为位置头是空的。是否有其他方法可以遵循重定向。setFollowRedirects也没有帮助Java “空白”;地点“;但重定向发生在IE中,java,httpurlconnection,Java,Httpurlconnection,我正在尝试使用HttpURLCONNECTION对象访问URL,但重定向似乎没有被识别,因为位置头是空的。是否有其他方法可以遵循重定向。setFollowRedirects也没有帮助 private static boolean isLive(String link) { HttpURLConnection urlConnection = null; try { URL url = new URL(link); System.out.println(url); urlConnecti
private static boolean isLive(String link) {
HttpURLConnection urlConnection = null;
try {
URL url = new URL(link);
System.out.println(url);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setInstanceFollowRedirects(true);
urlConnection.setRequestMethod("GET");
// urlConnection.connect();
//urlConnection.setConnectTimeout(5000); /* timeout after 5s if can't connect */
//urlConnection.setReadTimeout(5000); /* timeout after 5s if the page is too slow */
urlConnection.connect();
int resp = urlConnection.getResponseCode();
System.out.println(resp);
String redirectLink = urlConnection.getHeaderField("Location");
System.out.println(redirectLink);
if (redirectLink != null && !link.equals(redirectLink)) {
return isLive(redirectLink);
} else {
return urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK;
}
} catch (Exception e) {
return false;
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
略作修改的代码忽略SSL证书错误
import java.net.HttpURLConnection;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.slf4j.LoggerFactory;
public class RedirectTest {
private static boolean isLive(String link) {
HttpURLConnection urlConnection = null;
try {
URL url = new URL(link);
System.out.println("link: " + url);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setInstanceFollowRedirects(false);
urlConnection.setRequestMethod("GET");
// urlConnection.connect();
//urlConnection.setConnectTimeout(5000); /* timeout after 5s if can't connect */
//urlConnection.setReadTimeout(5000); /* timeout after 5s if the page is too slow */
urlConnection.connect();
int resp = urlConnection.getResponseCode();
System.out.println(resp);
String redirectLink = urlConnection.getHeaderField("Location");
System.out.println("Location : " + redirectLink);
if (redirectLink != null && !link.equals(redirectLink)) {
boolean b = isLive(redirectLink);
System.out.println("isLive " + redirectLink + " = " + b);
return b;
} else {
return urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK;
}
} catch (Exception e) {
LoggerFactory.getLogger(RedirectTest.class).debug("Exception", e);
return false;
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
}
public static void main(String[] args) throws Exception {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
isLive("https://www0.bankofamerica.com/home-loans/mortgage-purchase.go");
}
}
您从HTTP服务器得到的响应是什么?它是公共服务器吗?您可以发布URL还是可以发布响应(状态、标题等)?这是一个内部应用程序。。但我发现,使用您的示例URL,我得到了一个永久移动的
HTTP/1.1 301位置:https://www9.bankofamerica.com/home-loans/mortgage-purchase.go
。您确定位置标题为空吗?或者在您的页面中是否有类似于通过JavaScript重定向或刷新元标记的内容?哇。。这与我在这里得到的完全不同。你能告诉我你是怎么得到重定向信息的吗。这是我正在使用的代码,供您参考。不知何故,我并不认为这段代码无法建立连接,我使用的是curlcurl--verbose--unsecurehttps://www0.bankofamerica.com/home-loans/mortgage-purchase.go
并获得响应