2017-10-15 63 views
0

我想使用WebClient從網站下載圖像。 如果圖像存在,我檢查了瀏覽器,它確實如此。WebClient在DownloadFile中返回500(內部服務器錯誤),同時瀏覽器加載圖像

我使用此代碼下載圖片:

Private Function pDownload(ByVal uFrom As String, ByVal uTo As String) As Boolean 

    Try 
     Using Client As New WebClient 
      Client.DownloadFile(uFrom, uTo) 
     End Using 
     Return True 
    Catch ex As Exception 
     Debug.Print("Failed: " + uFrom + vbNewLine + ex.ToString) 
     Return False 
    End Try 

End Function 

有誰知道爲什麼它會返回一個500 - 內部服務器錯誤?

+2

也許是因爲WebClient使用的用戶代理? – DogeAmazed

+0

@DogeAmazed是的,這是我的情況的解決方案。你能評論你的答案嗎? – tmighty

回答

0

500 - 內部服務器錯誤是服務器響應,而不是.net中的本地錯誤。您的下載代碼是一個非常簡單的呼籲,將網址uFrom下載到本地文件uTo--聽起來它的工作正常。

問題是服務器以500 INTERNAL SERVER ERROR響應,並且您希望它以200 OK響應。 WebClient看到來自服務器的500響應,並知道它是不成功的響應,因此它引發該異常。如果文件丟失,服務器應該404 NOT FOUND響應。如果這是一個沒有獲得許可的問題,我們會希望一臺性能良好的服務器以401 NOT AUTHORIZED的響應。通用的500響應僅僅意味着「意外出錯」。

服務器響應500的原因很多 - 例如文件系統錯誤,數據庫錯誤,服務器應用程序中的錯誤等。我假設因爲您沒有發佈任何服務器端代碼,你沒有編寫服務器應用程序,並且這是一個現有的(並且可能是行爲良好的)服務器。由於你沒有做任何事情 - 只是試圖下載文件 - 那麼我能想到的最可能的原因可能是你的網址uFrom無效,或者服務器不認爲是安全的。

一個簡單的方法來測試你的網址它以隱身/隱私瀏覽模式打開一個新的瀏覽器窗口(以確保你沒有cookie導致服務器行爲不同),並將uFrom的值直接粘貼到地址中酒吧。如果您在瀏覽器中獲得相同的結果(500),那麼您知道服務器或您的URL有問題。如果您在瀏覽器測試中獲得的結果與運行代碼的結果不同,則來自瀏覽器的請求標頭與默認情況下發送的請求標頭不同。如果是這樣的話,我會建議安裝fiddler或類似的工具來檢查瀏覽器請求url時與當您的代碼請求相同url時發生的事情的區別。

相關問題