[.NET]利用Fiddler來查看WebClient Download問題

[.NET]利用Fiddler來查看WebClient Download問題

今天同事問一個關於透過WebClient.DownloadFile的問題!

他透過IE輸入要download File的Url,可以正常下載檔案。

但是如果是透過程式呼叫WebClient.DownloadFile,卻不無法下載檔案! 程式如下,

//using System.Net;
using (WebClient wc = new WebClient())
{
	string downloadFileUrl = @"http://downloadfileurl";
	string saveFileName = @"h:\test1.xls";
	wc.Credentials = System.Net.CredentialCache.DefaultCredentials;
	wc.DownloadFile(new Uri(downloadFileUrl), saveFileName);
}

 

結果下載下來的檔案內容如下,

<script>
alert("您的瀏覽器未送出Cookie。請確定Cookie的設定已打開!");
</script>

image

 

於是將Download的URL透過Fiddler來測試,卻是可以正常download下來的,如下,

image

image

 

透過Fiddler比較一下可正常下載與無法正常下載時發現,可正常下載的Header多了一個User-Agent: Fiddler。

image

於是在程式中多加入wc.Headers["User-Agent"] = "Mozilla/4.0";,就可以正常下載檔案下來了!

//using System.Net;
using (WebClient wc = new WebClient())
{
	string downloadFileUrl = @"http://downloadfileurl";	
string saveFileName = @"h:\test1.xls";
	wc.Credentials = System.Net.CredentialCache.DefaultCredentials;
	wc.Headers["User-Agent"] = "Mozilla/4.0";
	wc.DownloadFile(new Uri(downloadFileUrl), saveFileName);
}

 

像這種要透過程式去模擬Browser下載檔案的話,如果發現程式運作上有什麼問題的話,可以透過Fiddler去比較2者的差異,然後再補足它。

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^