我有一个API(https://www.readability.com/developers/api/parser#idm386426118064)来提取webapges的内容,但传递一个缩短的URL或重定向到其他的url时,它会给出错误。如何获取缩短网址的目标网址?
我正在开发windows phone 8.1(xaml)应用程序。有什么方法可以在c#或任何解决方法中获取目标网址?
如网址 - http://www.bing.com/r/2/BB7Q4J4?a=1&m=EN-IN
我有一个API(https://www.readability.com/developers/api/parser#idm386426118064)来提取webapges的内容,但传递一个缩短的URL或重定向到其他的url时,它会给出错误。如何获取缩短网址的目标网址?
我正在开发windows phone 8.1(xaml)应用程序。有什么方法可以在c#或任何解决方法中获取目标网址?
如网址 - http://www.bing.com/r/2/BB7Q4J4?a=1&m=EN-IN
你可以拦截Location
头值的HttpClient
遵循它像这样前:
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();
}
}
该解决方案将永远是最有效的,因为它只能发出一个请求。
但是,有可能短url会引用另一个短url,并因此导致此方法失败。
另一种解决办法是允许HttpClient
跟随Location
头值并观察目的地:
using (var client = new HttpClient())
{
var response = client.GetAsync("shortUrl").Result;
var longUrl = response.RequestMessage.RequestUri;
}
这种方法是既大于第一更简洁和更可靠。
缺点是此代码将发出两个请求,而不是一个。
你可以得到的GetResponse()的ResponseUri:
string redirectedURL = WebRequest.Create("http://www.bing.com/r/2/BB7Q4J4?a=1&m=EN-IN")
.GetResponse()
.ResponseUri
.ToString();
有趣的文章,顺便说一句。
您需要检查从URL返回的标头。
如果您获得HTTP返回码301或302,则会通知您该页面将您重定向到另一个URL。
有关HTTP返回码的更多详细信息,请参阅http://www.w3.org/Protocols/HTTP/HTRESP.html。
查看http://stackoverflow.com/questions/1382646/a-way-to-figure-out-redirection-url – artm 2014-10-07 03:31:59
下面提出的'异步'解决方案是您可能需要的,详情请查看链接提供的@artm(同步版本,可能不会直接为WP工作)。 – 2014-10-07 03:40:54