2016-07-15 4 views
0

をダウンロードしていない私はSSISでスクリプトタスクでHTTPSサイトからZIPファイルをダウンロードしようとしている、C#の初心者にC#DownloadFileTaskAsyncは、ネストされたzipファイル

を助けてください。各「外部」zipファイルには、3つのtxtファイルを含む「内部」zipファイルが含まれています。豊富な検索後

、私も「待つ」、「.WAIT()」とDownloadFileTaskAsyncを強化してきました「(webClient.IsBusy)しながら、それでも空のダウンロードのみに管理する 『外部』のzipファイルを。

それが空ではありません方法で、完全な「外部」ファイルをダウンロードする方法を見つけるために私を助けて、それの内側に「内部」ジッパーと、すべての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; 
} 

、代わりにWebクライアントのこのクラスを使用します。

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

関連する問題