2011-11-14 119 views
0

此代碼拋出異常。如何解決它?DownloadFile拋出內部服務器錯誤

string uriString = "http://www.fileserve.com/login.php"; 

NameValueCollection postvals = new NameValueCollection(); 
postvals.Add("loginUserName", "aaaa"); 
postvals.Add("loginUserPassword", "xxxx"); 
postvals.Add("autoLogin", "on"); 
postvals.Add("loginFormSubmit", "Login"); 

WebClient myWebClient = new WebClient(); 
myWebClient.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7"); 
myWebClient.UploadValues(uriString, "POST", postvals); 

string cookiestr = myWebClient.ResponseHeaders.Get("Set-Cookie"); 
myWebClient.Headers.Add("Cookie", cookiestr); 
myWebClient.DownloadFile(new Uri("http://fileserve.com/file/2jkYtZS"), "C:\\temp\\" + Path.GetFileName("http://www.fileserve.com/file/2jkYtZS/some.avi")); 

異常被拋出myWebClient.DownloadFile()方法:

The remote server returned an error: (500) Internal Server Error. 
     at System.Net.WebClient.DownloadFile(Uri address, String fileName) 
    at SimonDownloader2.Program.Main(String[] args) in C:\Users\Simon\Workspace\C#\Projects\SerialDownloader2\SerialDownloader2\Program.cs:line 32 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 
+1

這是一個服務器問題。 – SLaks

+0

「Set-Cookie」響應頭中的數據通常不兼容爲「Cookie」請求頭的數據。 –

+0

你可以隨時啓動Wireshark並記錄流量。例如,是否所有的POST值都上傳了?對MSDN有一個評論,說UploadValues只上傳一個值:http://msdn.microsoft.com/en-us/library/system.net.webclient.uploadvalues(v=VS.100).aspx – kol

回答

1

修復代碼在服務器(如果這是你的),或者任何你想正確使用有使用。

這不是DownloadFile的錯誤,而是您連接的服務器返回錯誤HTTP 500.所以我想你嘗試了一些服務器不喜歡的東西。也許你不應該在登錄頁面或者設置適當的cookie之前登錄。

調試這個最簡單的方法可能是使用Fiddler,在瀏覽器中執行你正在做的事情並觀察交互,然後嘗試確定你在代碼中做了什麼錯誤。

+0

+1。 WireShark也可能有用。 – kol

+0

kol:只要你處理HTTP提琴手似乎是一個更容易的路線。無需解剖較低的協議。 – Joey

+0

我在我的工作場所都使用過。我只是更喜歡WireShark,因爲除了HTTP之外,還有很多其他流量類型需要分析。 Fiddler的主要優勢是您可以分析HTTPS流量並對其進行處理。 – kol

0

您不能,這是fileserve.com端的問題,除非您也運行該服務器,否則您將無法修復它。

現在,這可能是由於您根據您的請求發送的一些意外參數而發生的。我會先在該名稱集合中發送較少的值,直到找出哪一個是罪魁禍首。

相關問題