WebClient returns 500(内部服务器错误)在下载文件中,而浏览器确实加载了图像
WebClient returns 500 (Internal Server Error) in DownloadFile while browsers do load the image
我想使用 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
有人知道为什么它可能 return 500 - 内部服务器错误吗?
500 - 内部服务器错误是服务器响应,而不是 .net 中的本地错误。您的下载代码是一个非常简单的调用,用于将 URL uFrom
下载到本地文件 uTo
-- 听起来它工作正常。
问题是服务器正在响应 500 INTERNAL SERVER ERROR
,而您希望它响应 200 OK
。 WebClient
看到来自服务器的 500 响应并且知道它是一个 non-successful 响应所以它抛出该异常。如果文件丢失,服务器 应该 响应 404 NOT FOUND
。如果是没有权限的问题,我们希望 well-behaved 服务器响应 401 NOT AUTHORIZED
。通用 500
响应仅表示 "something unexpected went wrong".
服务器响应 500
-- 的原因有很多,例如文件系统错误、数据库错误、服务器应用程序中的错误等。我假设您不是发布任何 server-side 代码,说明您没有编写服务器应用程序并且这是一个现有的(并且可能是 well-behaved)服务器。由于您没有做任何花哨的事情——只是试图下载一个文件——那么我能想到的最可能的原因可能是 uFrom
中的 url 无效,或者被认为不安全服务器。
测试 url 它以 incognito/private 浏览模式打开新浏览器 window 的简单方法(以确保您没有导致服务器行为不同的 cookie ) 并将 uFrom
的值直接粘贴到地址栏中。如果您在浏览器中得到相同的结果 (500),那么您就知道服务器或您的 URL 有问题。如果您在浏览器测试中得到的结果与从 运行 代码中得到的结果不同,那么来自浏览器的请求 headers 与默认情况下 WebClient
发送的请求有所不同。如果是这种情况,我建议安装 fiddler
或类似工具来检查浏览器请求 url 与代码请求相同 url 时发生的差异。
有时服务器会因为用户代理不存在而拒绝请求。
您可以使用以下代码行添加它。
Client.Headers.Add ("user-agent", "Your User-Agent")
完整示例和文档:https://docs.microsoft.com/en-us/dotnet/api/system.net.webclient?view=netframework-4.7。
我想使用 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
有人知道为什么它可能 return 500 - 内部服务器错误吗?
500 - 内部服务器错误是服务器响应,而不是 .net 中的本地错误。您的下载代码是一个非常简单的调用,用于将 URL uFrom
下载到本地文件 uTo
-- 听起来它工作正常。
问题是服务器正在响应 500 INTERNAL SERVER ERROR
,而您希望它响应 200 OK
。 WebClient
看到来自服务器的 500 响应并且知道它是一个 non-successful 响应所以它抛出该异常。如果文件丢失,服务器 应该 响应 404 NOT FOUND
。如果是没有权限的问题,我们希望 well-behaved 服务器响应 401 NOT AUTHORIZED
。通用 500
响应仅表示 "something unexpected went wrong".
服务器响应 500
-- 的原因有很多,例如文件系统错误、数据库错误、服务器应用程序中的错误等。我假设您不是发布任何 server-side 代码,说明您没有编写服务器应用程序并且这是一个现有的(并且可能是 well-behaved)服务器。由于您没有做任何花哨的事情——只是试图下载一个文件——那么我能想到的最可能的原因可能是 uFrom
中的 url 无效,或者被认为不安全服务器。
测试 url 它以 incognito/private 浏览模式打开新浏览器 window 的简单方法(以确保您没有导致服务器行为不同的 cookie ) 并将 uFrom
的值直接粘贴到地址栏中。如果您在浏览器中得到相同的结果 (500),那么您就知道服务器或您的 URL 有问题。如果您在浏览器测试中得到的结果与从 运行 代码中得到的结果不同,那么来自浏览器的请求 headers 与默认情况下 WebClient
发送的请求有所不同。如果是这种情况,我建议安装 fiddler
或类似工具来检查浏览器请求 url 与代码请求相同 url 时发生的差异。
有时服务器会因为用户代理不存在而拒绝请求。
您可以使用以下代码行添加它。
Client.Headers.Add ("user-agent", "Your User-Agent")
完整示例和文档:https://docs.microsoft.com/en-us/dotnet/api/system.net.webclient?view=netframework-4.7。