在Java中获取结果URL

时间:2010-09-01 05:11:10

标签: java url

是否可以从给定的网址获取结果网址?例如

System.out.println(realUrl("sourceforge.com"));

private String  realUrl(String url)
{
 ....
}

应打印生成的网址“http://sourceforge.net/”,同样tinyurls会返回目标网址

2 个答案:

答案 0 :(得分:3)

你可以:

  • 检查字符串中是否存在协议。如果没有,请附加http://

  • 然后使用HTTP客户端(如HttpClient)打开URL。然后按照重定向(.setFollowRedirects(true))直到它停止重定向。这将是“最终”或“真实”的URL。

HttpClient的一些示例代码可以在这里找到:
http://svn.apache.org/viewvc/httpcomponents/oac.hc3x/trunk/src/examples/
(参见TrivialApp.java开始使用)

答案 1 :(得分:0)

未经过正确测试。

import java.io.*;
import java.net.*;

public class UrlCon3
  {

    public static void main(String[] args)
      {
        String x="http://tinyurl.com/cys7t";
        while(x!=null)
        {
            System.out.println(x);
            x=getRedirectionUrl(x);
        }

      }

    static String getRedirectionUrl(String x)
    {
        BufferedReader in = null;
        try
          {
            URL url = new URL(x);
            HttpURLConnection.setFollowRedirects(false);
            HttpURLConnection uc = (HttpURLConnection)url.openConnection();
            uc.connect();
            in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
            return(uc.getHeaderField("Location"));
          }
        catch (MalformedURLException e)
          {
            e.printStackTrace();
          }
        catch (IOException e)
          {
            e.printStackTrace();
          }
        finally
          {
            try
              {
                if (null != in)
                  {
                    in.close();
                  }
              }
            catch (IOException e)
              {
                // ignore
              }
          }
        return null;
    }
  }