2017-10-15 70 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时发生的事情的区别。

相关问题