2010-04-03 4 views

답변

7

URL을 요청하고 반환 된 상태 코드를 확인하십시오. 301 또는 302 경우, "확장 URL"을 포함하는하는 Location 헤더를 찾습니다 :

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"]; 
} 

참고 :이 솔루션은 하나의 리디렉션이 발생하는 것을 가정한다. 필요하거나 원하지 않을 수도 있습니다. obfuscator (bit.ly 등)의 URL을 단순하게 디오 프 스프백하려면이 솔루션이 잘 작동해야합니다.

+0

이전에 해본 적이 있지만 해결책은 하나 이상의 리디렉션이 없다고 가정합니다. 종종 좋은 솔루션이지만, 최종 URI가 실제로 중요했던 한 작업에서 작업했습니다.이 경우 리디렉션이 필요한 경우가있었습니다. – JasonTrue

+0

@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

이 작업은 가능하지만 [내 솔루션] (http://stackoverflow.com/questions/2569851/how-to-expand-urls-in-c/2569869#2569869)보다 약간 "비용이 많이들 것입니다. 단일 요청 만;) –

관련 문제