我想使用WebClient从网站下载图片。 如果图像存在,我使用浏览器进行了检查,确实存在。
我使用此代码下载图片:
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 - 内部服务器错误吗?
答案 0 :(得分:1)
有时服务器会因为不存在用户代理而拒绝请求。
您可以使用以下代码行添加它。
Client.Headers.Add ("user-agent", "Your User-Agent")
完整示例和文档:https://docs.microsoft.com/en-us/dotnet/api/system.net.webclient?view=netframework-4.7。
答案 1 :(得分:0)
500 - 内部服务器错误是服务器响应,而不是.net中的本地错误。您下载的代码是一个非常简单的调用,用于将URL uFrom
下载到本地文件uTo
- 听起来它工作正常。
问题是服务器正在使用500 INTERNAL SERVER ERROR
进行响应,您希望它使用200 OK
进行响应。 WebClient
看到来自服务器的500响应,并且知道它是一个不成功的响应,因此它会抛出该异常。如果文件丢失,服务器应以404 NOT FOUND
响应。如果这是一个没有权限的问题,我们希望一个行为良好的服务器响应401 NOT AUTHORIZED
。通用的500
响应只是意味着,"出乎意料的错误"。
服务器响应500
的原因有很多 - 例如文件系统错误,数据库错误,服务器应用程序中的错误等等。我假设因为您没有发布任何内容服务器端代码,您没有编写服务器应用程序,而且这是一个现有的(并且可能是表现良好的)服务器。因为你没有做任何花哨的事情 - 只是试图下载一个文件 - 然后我可能想到的最可能的原因可能是uFrom
中的你的网址是无效的,或者被服务器认为不安全。
一种简单的方法来测试您的网址,以隐身/隐私浏览模式打开新的浏览器窗口(以确保您没有导致服务器行为不同的Cookie)并直接粘贴uFrom
的值进入地址栏。如果您在浏览器中获得相同的结果(500),那么您就知道服务器或URL有问题。如果您在浏览器测试中获得的结果与运行代码时的结果不同,那么来自浏览器的请求标头中的内容与WebClient
默认发送的内容有所不同。如果是这种情况,我建议您安装fiddler
或类似工具,以检查浏览器请求网址时与您的代码请求相同网址时发生的情况之间的差异。