如何获取缩短网址的目标网址?

ac-*_*lap 1 c# web-crawler http-redirect windows-phone-8

我有一个API ( https://www.readability.com/developers/api/parser#idm386426118064 ) 来提取网页的内容,但是在传递缩短的 url 或重定向到其他 url 时,它会出错。

我正在开发 Windows Phone 8.1 (xaml) 应用程序。有没有办法在c#或任何解决方法中获取目标网址?

例如网址 - http://www.bing.com/r/2/BB7Q4J4?a=1&m=EN-IN

Use*_*678 5

您可以LocationHttpClient跟随它之前拦截标头值,如下所示:

using (var handler = new HttpClientHandler())
{
    handler.AllowAutoRedirect = false;
    using (var client = new HttpClient(handler))
    {
        var response = await client.GetAsync("shortUrl");
        var longUrl = response.Headers.Location.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

此解决方案将始终是最有效的,因为它只发出一个请求。

但是,短网址可能会引用另一个短网址,从而导致此方法失败。

另一种解决方案是允许HttpClient跟随Location标头值并观察目的地:

using (var client = new HttpClient())
{
    var response = client.GetAsync("shortUrl").Result;
    var longUrl = response.RequestMessage.RequestUri;
}
Run Code Online (Sandbox Code Playgroud)

这种方法比第一种方法更简洁、更可靠。

缺点是此代码将发出两个请求而不是一个。