2011-07-10 3 views
0

私はWebClient.DownloadFileを使用して、インターネットから小さな実行可能ファイルをダウンロードしています。このメソッドは非常にうまく動作しています。しかし、私は今このハードドライブ上ではなく、バイト配列にこの実行可能ファイルをダウンロードしたいと思います。私はいくつかの読書をして、WebClient.DownloadDataメソッドを見つけました。 downloadDataメソッドの問題は、ファイルをダウンロードするのではなく、自分のファイルのダウンロードページの背後にあるHTMLデータをダウンロードしていることです。WebClient.DownloadFileとWebClient.DownloadData

私は何十ものサイトを使用しようとしました。それぞれ同じ問題をもたらします。以下は私が使用しているコードです。

// Create a new instance of the System.Net 'WebClient' 
     System.Net.WebClient client = new System.Net.WebClient(); 

     // Download URL 
     Uri uri = new Uri("http://www35.multiupload.com:81/files/4D7B4D2BFC3F1A9F765A433BA32ED2C5883D0CE133154A0FDB7E7786547A3165DA62393141C4AF8FF36C75222566CF3EB64AF6FBCFC02099BB209C891529CF7B90C83D9C63D39D989CBB8ECE6DE2B83B/Project1.exe"); 

     byte[] dbytes = client.DownloadData(uri); 

     MessageBox.Show(dbytes.Length.ToString()); // Not the size of my file 

実行可能ファイルのデータをバイト配列にダウンロードしようとしています。

はあなたが期限切れのトークンのURLを使用してファイルをダウンロードしようとしている、任意の助けのために エヴァン

+0

を解析いけませんフィドラーで? – SLaks

+0

@Slaks ...申し訳ありませんが、Fiddlerとは何ですか? –

+0

は、それはあなたの実際のHTTPリクエストとレスポンスを示しhttp://www.fiddler2.com/fiddler2/ – SLaks

答えて

2

、ありがとうございました。以下を参照してください:

URL:http://www35.multiupload.com:81/files/4D7B4D2BFC3F1A9F765A433BA32ED2C5883D0CE133154A0FDB7E7786547A3165DA62393141C4AF8FF36C75222566CF3EB64AF6FBCFC02099BB209C891529CF7B90C83D9C63D39D989CBB8ECE6DE2B83B/Project1.exe `

サーバー:www35

トークン:あなたは最後までタイマーを待ってファイルをダウンロードし、直接コピーすることはできません 4D7B4D2BFC3F1A9F765A433BA32ED2C5883D0CE133154A0FDB7E7786547A3165DA62393141C4AF8FF36C75222566CF3EB64AF6FBCFC02099BB209C891529CF7B90C83D9C63D39D989CBB8ECE6DE2B83B

リンク、それは "トークン"リンクです。ダウンロードページにリダイレクトする前に、指定された期間だけ動作します(バイナリデータの代わりにHTMLを取得する理由です)。

回避策

あなたがmultiuploadのHTMLをダウンロードして、HTMLソースコードから直接ダウンロードリンクを解析する必要があります。この方法だけが、最新のトークンURLを取得する確実な方法を提供します。どのように新しいURL取得方法@Darkスリップストリームが言った、あなたがファイルをダウンロードしようとしている期限切れのトークンのURLを使用して 見

+0

私はちょうど何を変えたのか分かりませんが、突然の私の元のコードは現在働いています。奇数... –

0

System.Net.WebClient client = new System.Net.WebClient(); 

     // Download URL 
     Uri uri = new Uri("http://www.multiupload.com/39QMACX7XS"); 

     byte[] dbytes = client.DownloadData(uri); 
     string responseStr = System.Text.Encoding.ASCII.GetString(dbytes); 
     HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
     doc.LoadHtml(responseStr); 
     string urlToDownload = doc.DocumentNode.SelectNodes("//a[contains(@href,'files/')]")[0].Attributes["href"].Value; 
     byte[] data = client.DownloadData(uri); 
     length = data.Length; 

を私はあなたが何を見ていた例外