如何在C#中展开URL?

3
2个回答

7
向URL发出请求并检查返回的状态码。如果状态码是301302,请查找Location头部,并获取其中包含的“扩展URL”。
string url = "http://popurls.com/go/msn.com/l4eba1e6a0ffbd9fc915948434423a7d5";

var request = (HttpWebRequest) WebRequest.Create(url);            
request.AllowAutoRedirect = false;

var response = (HttpWebResponse) webRequest.GetResponse();

if ((int) response.StatusCode == 301 || (int) response.StatusCode == 302)
{
    url = response.Headers["Location"];
}

注意:此解决方案假定只发生一个重定向。这可能是你需要的,也可能不是。如果你只想从混淆器(如bit.ly)中去除URL的混淆,那么这个解决方案应该很好用。

尽管我以前做过这个,但你的解决方案假定没有超过一个重定向。通常是足够好的解决方案,但我曾经处理过一个任务,最终URI实际上非常重要,在这种情况下,跟随重定向是必要的。 - JasonTrue

1

成功找到了答案。

    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://popurls.com/go/msn.com/l4eba1e6a0ffbd9fc915948434423a7d5");
    req.AllowAutoRedirect = true;
    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
    ServicePoint sp = req.ServicePoint;
    Console.WriteLine("End address is " + sp.Address.ToString());

1
这个方法是可行的,但比我的解决方案稍微“昂贵”一些,因为它需要进行多次请求 ;) - Jørn Schou-Rode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接