2012-11-20 5 views
1

단축 URL의 최종 목적지 URL을 가져와야합니다. 지금 나는 작동하는 것을 보이는 다음을하고있다 :단축 URL을 프로그래밍 방식으로 연장하는 방법

 var request = WebRequest.Create(shortenedUri); 
     var response = request.GetResponse(); 
     return response.ResponseUri; 

그러나 누군가는 더 나은 방법을 건의 할 수 있는가?

+5

"어떤 종류의"더 나은 것을 찾고 계십니까? (그런데 응답을 처분해야합니다 - 사용 문을 사용하십시오.) –

+0

tinyurl 또는 bt.ly에서와 같이? 이를 위해 리디렉션 위치를 확인하라는 요청을해야합니다. –

+1

현재 접근 방식의 문제점은 무엇입니까? –

답변

2

HTTP 요청을해야하지만 리디렉션을 따를 필요가 없습니다. 기본값은 WebRequest입니다. 은 "연장"URL이 자체 리디렉션 경우 이것이 의미하는 것으로

using System; 
using System.Net; 

class Test 
{ 
    static void Main() 
    { 
     string url = "http://tinyurl.com/so-hints"; 
     Console.WriteLine(LengthenUrl(url)); 
    } 

    static string LengthenUrl(string url) 
    { 
     var request = WebRequest.CreateHttp(url); 
     request.AllowAutoRedirect = false; 
     using (var response = request.GetResponse()) 
     { 
      var status = ((HttpWebResponse) response).StatusCode; 
      if (status == HttpStatusCode.Moved || 
       status == HttpStatusCode.MovedPermanently) 
      { 
       return response.Headers["Location"]; 
      } 
      // TODO: Work out a better exception 
      throw new Exception("No redirect required."); 
     } 
    } 
} 

주, 당신은에서와 같이 "최종"URI을받지 않습니다 : 여기에 을 만드는 간단한 예제 하나가 요청입니다 원래 코드. 마찬가지로 연장 된 URL이 유효하지 않으면 그 URL을 알 수 없습니다. 리다이렉트 한 URL 만 가져옵니다. 좋은 점인지 아닌지는 유스 케이스에 달려 있습니다 ...

3

이 단축 URL이 일부 온라인 서비스 공급자에 의해 생성 된 경우 짧은 URL과 실제 URL 간의 매핑을 저장하는 것은이 서비스 공급자 만입니다. 따라서 당신은 당신이했던 것과 똑같이 HTTP 요청을 보내서이 제공자를 질의 할 필요가있다. 또한 제대로 using 문에 그들을 배치로는 IDisposable 자원을 처분하는 것을 잊지 마세요 :

var request = WebRequest.Create(shortenedUri); 
using (var response = request.GetResponse()) 
{ 
    return response.ResponseUri; 
} 

를 서비스 제공자는이 동사를 사용 가리키는해야하는 위치 응답의 HTTP 헤더를 읽을 수있는 HEAD 동사를 지원하는 경우 실제 URL 또는 요청 개체에서 AllowAutoRedirect 속성을 false로 설정 한 다음 위치 응답 HTTP 헤더를 읽을 수 있습니다. 이렇게하면 클라이언트는 실제 리소스로 리디렉션되지 않고 관심이 없을 때 전체 응답 본문을 가져옵니다.

물론 온라인 서비스 제공 업체가 짧은 URL에서 실제 URL을 직접 제공 할 수있는 API를 제공하는 경우 가장 좋은 방법입니다.

+0

이것은'(var response = WebRequest.Create (shortenedURL) .GetResponse())를 사용하는 것으로 단축 될 수 있습니다. return response.ResponseUri; }' – JMK

+4

길이가 짧아도 "읽기 쉽지 않다"는 것을 의미하지 않습니다. – hometoast

+0

하하 매우 사실입니다! +1 – JMK

관련 문제