can't get response header location using Java&

2019-01-26 06:21发布

问题:

can someone kindly suggest what I'm doing wrong here?
I'm trying to get the header location for a certain URL using Java here is my code:

URLConnection conn = url.openConnection();
String location = conn.getHeaderField("Location");  

it's strange since I know for sure the URL i'm refering to return a Location header and using methods like getContentType() or getContentLength() works perfectly

your advice is much appreciated as always :)

Thanks

回答1:

Perhaps Location header is returned as a part of redirect response. If so, URLConnection handles redirect automatically by issuing the second request to the pointed resource, so you need to disable it:

((HttpURLConnection) conn).setInstanceFollowRedirects(false);

EDIT: If you actually need a URL of the redirect target and don't want to disable redirect handling, you may call getURL() instead (after connection is established).



回答2:

Just a follow up to axtavt's answer... If the url has multiple redirects, you could do something like this in order to obtain the direct link:

String location = "http://www.example.com/download.php?getFile=1";
HttpURLConnection connection = null;
for (;;) {
    URL url = new URL(location);
    connection = (HttpURLConnection) url.openConnection();
    connection.setInstanceFollowRedirects(false);
    String redirectLocation = connection.getHeaderField("Location");
    if (redirectLocation == null) break;
    location = redirectLocation;
}