浏览器加载图像时,WebClient在DownloadFile中返回500(内部服务器错误)



我想使用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内部服务器错误吗?

有时服务器会因为不存在用户代理而拒绝请求。

您可以使用以下代码行添加它。

Client.Headers.Add ("user-agent", "Your User-Agent")

完整的示例和文档:https://learn.microsoft.com/en-us/dotnet/api/system.net.webclient?view=netframework-4.7.

500-内部服务器错误是服务器响应,而不是.net中的本地错误。下载代码是一个非常简单的调用,用于将URLuFrom下载到本地文件uTo,听起来它工作正常。

问题是服务器使用500 INTERNAL SERVER ERROR进行响应,而您希望它使用200 OK进行响应。WebClient看到来自服务器的500响应,并知道这是一个不成功的响应,因此抛出该异常。如果文件丢失,服务器使用404 NOT FOUND进行响应。如果这是一个没有权限的问题,我们希望一个行为良好的服务器用401 NOT AUTHORIZED进行响应。一般的500响应只是表示"出现了意外的错误"。

服务器会以500响应的原因有很多,例如文件系统错误、数据库错误、服务器应用程序中的错误等。我认为,由于您没有发布任何服务器端代码,因此您没有编写服务器应用程序,并且这是一个现有的(可能表现良好)服务器。由于你没有做任何花哨的事情——只是试图下载一个文件——那么我能想到的最可能的原因可能是你在uFrom中的url无效,或者服务器认为它不安全。

测试url的一个简单方法是以匿名/私人浏览模式打开一个新的浏览器窗口(以确保您没有导致服务器行为不同的cookie),并将uFrom的值直接粘贴到地址栏中。如果你在浏览器中得到相同的结果(500),那么你就知道服务器或你的URL有问题。如果您在浏览器测试中得到的结果与运行代码的结果不同,那么来自浏览器的请求标头中的内容与WebClient默认发送的内容不同。如果是这样的话,我建议安装fiddler或类似的工具来检查浏览器请求url时与代码请求相同url时发生的情况的差异。

相关内容

  • 没有找到相关文章

最新更新