gpt4 book ai didi

httpwebrequest - 在 HttpWebRequest 上获取 "underlying connection was closed"

转载 作者:行者123 更新时间:2023-12-03 16:08:58 27 4
gpt4 key购买 nike

我有一个用 VB.NET 编写的应用程序( 不是 asp.net,它是一个 Windows 控制台应用程序)。我正在尝试调用一个 url(一个 html 页面)并将响应返回到一个字符串中。响应是直接的 JSON,没有任何 html 标签。它以 { 打开并以 } 结束.

我很好地创建了 HttpWebRequest 对象。然后调用req.GetResponse() .一旦我这样做,我就会收到错误 The underlying connection was closed: The connection was closed unexpectedly.我一直在谷歌搜索和检查stackoverflow,并尝试了我发现的所有适用的东西(其中很多与WCF服务配置有关,不适用)。

这是我的代码:

Public Function GetJSON(ByRef d As db.Device) As Boolean
Try
d.Url = "http://" & d.IpAddress & ini.doc.<svc>.<url>.Value

Dim req As HttpWebRequest = HttpWebRequest.Create(d.Url)
// req.Accept = "*/*"
// req.Timeout = 30000
// req.ReadWriteTimeout = 30000
// req.KeepAlive = False
// req.UseDefaultCredentials = True
// req.CachePolicy = HttpWebRequest.DefaultCachePolicy
// req.Proxy = HttpWebRequest.DefaultWebProxy
// req.ProtocolVersion = New System.Version(1, 0)

Dim rsp As HttpWebResponse = req.GetResponse()

Return True
Catch ex As Exception
Log(ex.Message)
Return False
Finally
rsp = Nothing
req = Nothing
End Try
End Function

注释掉的行(错误的注释样式,但 SO 会正确解析)是我迄今为止根据我在网上找到的所有内容。他们都没有修复它。我已经验证了正在构建的 URL 是正确的;如果我在浏览器中调用完全相同的 URL,它会返回完全正确的预期响应。

我已经尝试对其进行wiresharking ...我看到实际预期的完整数据在鲨鱼输出中返回,然后是几行,然后是一条红线,上面写着: http > 51943 [RST] Seq=1607 Win=0 Len=0这是 .NET 抛出错误之前显示的最后一行。

我也试过打开 System.Net根据 SO 上的帖子跟踪/记录,在输出文件中,我同样看到所有预期的 JSON 数据确实回来了,但是在它回来之后,它会在 .NET 跟踪日志中抛出这些行:
System.Net.Sockets Verbose: 0 : [7040] Exiting Socket#60467532::Receive()   -> 1605#1605
System.Net.Sockets Verbose: 0 : [7040] Socket#60467532::Receive()
System.Net.Sockets Verbose: 0 : [7040] Data from Socket#60467532::Receive
System.Net.Sockets Verbose: 0 : [7040] 00000000 : :
System.Net.Sockets Verbose: 0 : [7040] Exiting Socket#60467532::Receive() -> 0#0
System.Net.Sockets Verbose: 0 : [7040] Socket#60467532::Dispose()
System.Net Error: 0 : [7040] Exception in the HttpWebRequest#27806816:: - The underlying connection was closed: The connection was closed unexpectedly.
System.Net Error: 0 : [7040] Exception in the HttpWebRequest#27806816::GetResponse - The underlying connection was closed: The connection was closed unexpectedly.

有什么想法可以尝试解决这个问题吗?我们正在从一些环境监测传感器设备中读取这些数据,他们给了我们这个 url 供我们使用。

真正让我感到困惑和困惑的两件事是
a) 在浏览器中调用时它工作得很好
b) WireShark 和 .NET 跟踪实际上都显示了所有数据 回来了,框架出于某种原因,除了在收到所有数据之后!

WebException 本身很少使用,因为它的 InnerException 为 null 并且它的状态只是说“ConnectionClosed {8}”

提前致谢!!!

更新 08/18 1130:我现在也尝试使用 System.Net.WebRequest而不是 HttpWebRequest .这也没有任何区别。

更新 08/18 1222:我只是尝试切换我的代码而不是使用 [Http]Web[Request|Response]调暗 WebClient而是使用它的 DownloadString()方法。然而,这也会引发同样的错误。

更新 08/18 1230:尝试使用 My.Computer.Network.DownloadFile() - 也得到相同的连接关闭错误。

最佳答案

您可以在 pastebin.com 上发布跟踪日志的全部内容并在此处发布链接吗?

您可能会收到此异常,因为服务器可能会在“Content-Length” header 中说它正在发送 N 个字节的实体,但实际上发送的字节数少于 N 个字节并关闭了连接。

回答:

谢谢你的数据。从tracelog和wireshark trace看,服务器似乎没有发送任何响应头,而是直接发送数据。这是 HTTP 协议(protocol)违规。这就是客户端抛出异常的原因。

关于httpwebrequest - 在 HttpWebRequest 上获取 "underlying connection was closed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3497575/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com