2016-07-15 4 views
0

는 C#을 초보자를 도와주세요 중첩 된 zip 파일을 다운로드하지. 각 "외부"zip 파일에는 3 개의 txt 파일이 들어있는 "내부"zip 파일이 들어 있습니다.C# DownloadFileTaskAsync 내가 SSIS의 스크립트 작업과 HTTPS에서 사이트를 압축 파일을 다운로드하기 위해 노력하고있어</p> <p>,

광범위한 검색 한 후, 내가 "기다리고 있습니다"로 DownloadFileTaskAsync을 강화했다 ".Wait()", 심지어 외부 "zip 파일"동안 (webClient.IsBusy)하지만 여전히 빈을 다운로드하는 관리 ".

은 비어되지 않습니다 방식으로 전체 "외부"파일을 다운로드 할 수있는 방법을 찾아야하는 데 도움이되지만 "내부"우편과 내부 3 개 TXT 파일을 포함하십시오 :

public async void Main() 
    { 
     WebClient webClient = new WebClient(); 
     webClient.Credentials = new NetworkCredential("myuser", "password", "https://example.com/Login.htm"); 

     webClient.DownloadFileTaskAsync(new Uri("https://example.com/#/FROMsender/EXTERNAL_20160706.zip"), @"C:\temp\Test\EXTERNAL_20160706.zip").Wait(); 
     while (webClient.IsBusy) Thread.Sleep(1000); 

     Dts.TaskResult = (int)ScriptResults.Success; 
    } 

을 >

+1

당신은 비어 있거나 비어 있지 무엇을 의미합니까? WebClient는 파일이 비 었는지 여부에 관계없이 파일을 다운로드합니다. 파일이있는 한 다운로드됩니다. 다운로드 후 파일을 추출 할 수 있습니다. –

+0

음, WebClient는 빈 외부 zip 만 다운로드합니다. 수동으로 다운로드하면 내부 zip 및 txt 파일이 있습니다. – Nadya

+0

내 관심사는 파일에 모두 도달하지 않는다는 것입니다. 그러나 나는 이것을 확인하는 방법조차 모른다. 제안? – Nadya

답변

0

이것을 사용해보십시오. webClient에 일부 헤더를 추가하십시오 :

public async void Main() 
{ 
    WebClientEx webClient = new WebClientEx(); // <= use WebClientEx 
    webClient.Credentials = new NetworkCredential("myuser", "password", "https://example.com/Login.htm"); 

    // Add headers here ------------ 
    webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36"); 
    webClient.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
    webClient.Headers.Add("Accept-Language", "en-US,en;q=0.5"); 
    webClient.Headers.Add("Accept-Encoding", "gzip, deflate"); 
    webClient.Headers.Add("Cache-Control", "max-age=0"); 
    webClient.Headers.Add("DNT", "1"); 
    //------------------------------ 

    webClient.DownloadFileTaskAsync(new Uri("https://example.com/#/FROMsender/EXTERNAL_20160706.zip"), @"C:\temp\Test\EXTERNAL_20160706.zip").Wait(); 
    while (webClient.IsBusy) Thread.Sleep(1000); 

    Dts.TaskResult = (int)ScriptResults.Success; 
} 

대신 웹 클라이언트의이 클래스를 사용

public class WebClientEx : WebClient 
{ 
    protected override WebRequest GetWebRequest(Uri address) 
    { 
     var webRequest = (HttpWebRequest) base.GetWebRequest(address); 
     if (webRequest != null) 
     { 
     webRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
     } 
     return webRequest; 
    } 
} 
+0

고마워. 작동하는 것으로 보이지만 다운로드 한 파일이 열리지 않습니다. 다른 파일 크기를 시도했지만 '@ "C : \ temp \ Test \ EXTERNAL_20160706.zip"에 도착한 모든 파일은 5KB로 보이며 압축을 거부합니다. 아이디어? – Nadya

+0

때로는 서버에 특정 번호 (예 : 암호 번호)가 필요합니다. 당신은 스스로 찾아야합니다. 브라우저를 사용하여 다운로드 하시겠습니까? 작동하는 경우 브라우저에서 요청 헤더를 찾아서 WebClient에 설정해야합니다. –

+0

도움을 주셔서 감사합니다, 불행히도 나는 번호를 찾을 수 없습니다. 파일을 수동으로 다운로드하면 브라우저 하단에 질문이 표시되고 파일을 저장하거나 열 것인지 묻습니다. 다운로드가 끝나면 파일이 다시 열리고 파일을 열지 묻습니다. 비록 헤더에 어떤 변화가 보이지는 않았지만 ... 정말 도움을 주셔서 감사합니다.하지만이 사이트는 다른 방법으로는 허용하지 않지만 사이트의 방식으로는 보이지 않습니다. ( – Nadya