2011-12-21 2 views
0

클라이언트 쪽 링크에서 묻는 exe 파일 다운로드를 자동화하고 싶습니다. http://go.microsoft.com/fwlink/?LinkID=149156에서 http://www.microsoft.com/getsilverlight/handlers/getsilverlight.ashx으로 첫 번째 리디렉션 된 링크를 얻을 수 있습니다. 클릭하여 작동 방식을 확인하십시오. fwlink -> .ashx -> .exe ... .exe에 대한 직접 링크를 얻고 싶습니다. 그러나 코드를 통해 웹 핸들러를 요청할 때 응답은 404를 반환하지만 브라우저에서 시도하면 실제로 다운로드됩니다. 누구든지 위의 링크를 다운로드 양식을 자동화하는 방법을 제안 할 수 있습니까? 리디렉션 된 링크를 얻으려는 코드는이 코드입니다.웹 브라우저에서 저장/대화 상자를 표시하지 않고 다운로드 자동화

public static string GetLink(string url) 
{ 
    HttpWebRequest httpWebRequest = WebRequest.Create(url) as HttpWebRequest; 
    httpWebRequest.Method = "HEAD"; 
    httpWebRequest.AllowAutoRedirect = false; 
    // httpWebRequest.ContentType = "application/octet-stream"; 
    //httpWebRequest.Headers.Add("content-disposition", "attachment; filename=Silverlight.exe"); 
    HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse; 
    if (httpWebResponse.StatusCode == HttpStatusCode.Redirect) 
    { 
     return httpWebResponse.GetResponseHeader("Location");    
    } 
    else 
    { 
     return null; 
    } 
} 
+1

@DavidStratton : 그는 클라이언트에서 C# 코드를 실행하고 있습니다 (가정). 보안 문제는 없습니다. – SLaks

+0

쿠키를 추가하거나 HEAD 대신 GET을 사용하십시오. – SLaks

+0

감사합니다 SLaks.I GET을 시도했습니다. 그것은 작동하지 않았다 그러나 과자를 위해 ... 나는 당신이 의미하는 무슨 인 경우에 응답에 그것을 추가하는 것을 시도했다? – Deku

답변

2

방금 ​​테스트 한 결과 파일이 다운로드됩니다.

WebClient client = new WebClient(); 

client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 

client.DownloadFile(url, "Filename.exe"); 

당신은 특정 실버 다운로드가 당신이 실행중인 브라우저에 따라 달라집니다로 그 다음을 감지 할 수는 실패합니다 따라서 경우, 사용자 에이전트를 추가 할 필요가 있었다.

사용자 에이전트를 원하는 다운로드를 트리거하는 것으로 변경하십시오.

+0

대단히 고마워요! 그것은 매력처럼 일했습니다! – Deku