5

私は次のように要求しています:

http://www.baseaddress.com/path/index1.html

送信した引数によると、次の 2 つのいずれかにリダイレクトされます: http://www.baseaddress.com/path2/
または http://www.baseaddress.com/path/index2.html

問題は、応答が次のみを返すことです: index2.htmlまたは/path2/

今のところ、最初の文字が/であるかどうかを確認し、これに従って URL を連結します。文字列チェックなしでこれを行う簡単な方法はありますか?

コード:

url = new URL("http://www.baseaddress.com/path/index1.php");
con = (HttpURLConnection) url.openConnection();
... some settings
in = con.getInputStream();
redLoc = con.getHeaderField("Location"); // returns "index2.html" or "/path2/"
if(redLoc.startsWith("/")){
  url = new URL("http://www.baseaddress.com" + redLoc);
}else{
  url = new URL("http://www.baseaddress.com/path/" + redLoc);
}

これが最善の方法だと思いますか?

4

3 に答える 3

20

java.net.URI.resolveを使用して、リダイレクトされた絶対 URL を判別できます。

java.net.URI uri = new java.net.URI ("http://www.baseaddress.com/path/index1.html");
System.out.println (uri.resolve ("index2.html"));
System.out.println (uri.resolve ("/path2/"));

出力

http://www.baseaddress.com/path/index2.html
http://www.baseaddress.com/path2/
于 2012-07-27T10:51:45.160 に答える
1

Java クラスURI関数resolveを使用して、これらの URI をマージできます。

public String mergePaths(String oldPath, String newPath) {
    try {
        URI oldUri = new URI(oldPath);
        URI resolved = oldUri.resolve(newPath);
        return resolved.toString();
    } catch (URISyntaxException e) {
        return oldPath;
    }
}

例:

System.out.println(mergePaths("http://www.baseaddress.com/path/index.html", "/path2/"));
System.out.println(mergePaths("http://www.baseaddress.com/path/index.html", "index2.html"));

出力します:

http://www.baseaddress.com/path2/
http://www.baseaddress.com/path/index2.html
于 2012-07-27T11:02:49.740 に答える
1
if(!url.contains("index2.html"))
{
   url = url+"index2.html";
}
于 2012-07-27T10:24:27.840 に答える