2014-10-07 2 views
0

У меня есть API (https://www.readability.com/developers/api/parser#idm386426118064), чтобы извлечь содержимое веб-страниц, но при передаче укороченного URL-адреса или URL-адреса, который перенаправляет на другой, он дает ошибку.Как получить URL-адрес URL-адреса сокращенного URL-адреса?

Я развиваю приложение windows phone 8.1 (xaml). Есть ли способ получить URL-адрес назначения в C# или любая работа вокруг?

например URL - http://www.bing.com/r/2/BB7Q4J4?a=1&m=EN-IN

+2

См. Http://stackoverflow.com/questions/1382646/a-way-to-figure-out-redirection-url – artm

+0

Решение «Async», предложенное ниже, является тем, что вам, вероятно, понадобится, для получения дополнительной информации см. Предоставленную ссылку @artm (только синхронные версии, скорее всего, не будут работать непосредственно для WP). –

ответ

4

Вы можете перехватывать значение 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; 
} 

Этот метод является одновременно terser и надежнее, чем первый.

Недостатком является то, что этот код выдаст два запроса вместо одного.

1

Вы можете получить ResponseUri от GetResponse():

string redirectedURL = WebRequest.Create("http://www.bing.com/r/2/BB7Q4J4?a=1&m=EN-IN") 
           .GetResponse() 
           .ResponseUri 
           .ToString(); 

Интересная статья, кстати.

-1

Вам необходимо проверить заголовки, возвращенные с URL-адреса.

Если вы получаете коды возврата HTTP 301 или 302, вам сообщают, что страница перенаправляет вас на другой URL-адрес.

См. http://www.w3.org/Protocols/HTTP/HTRESP.html для получения более подробной информации о кодах возврата HTTP.

Смежные вопросы