【发布时间】:2016-03-31 23:23:04
【问题描述】:
一段代码
WebClient wc = new WebClient();
String str = wc.DownloadString(new Uri("http://content.warframe.com/dynamic/rss.php"));
我遇到了异常:
“System.Net.WebException”类型的未处理异常发生在 系统.dll
附加信息:底层连接已关闭: 连接意外关闭。
我认为这是 .NET 中的一个错误(我使用的是 3.5),但我尝试了其他方法来获取此链接的内容(其 rss、xml)。还没有幸运的一击
var webrequest = (WebRequest)HttpWebRequest.Create(@"http://content.warframe.com/dynamic/rss.php");
var resp = webrequest.GetResponse();
//HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse(); // Wont work also
上面的这段代码也不行,都抛出了同样的异常
提琴手日志:
会话状态:已中止。
响应实体大小:512 字节。
== 旗帜 ===================
BitFlags:[ResponseGeneratedByFiddler] 0x100
X-ABORTED-WHEN:完成
X-CLIENTIP:127.0.0.1
X-CLIENTPORT:2747
X-出口:2748
X-FAILSESSION-WHEN:阅读响应
X-HOSTIP:205.185.216.10
X-PROCESSINFO: willitwork.vshost:3300
== 时间信息 ============
客户端连接:10:29:11.706
客户端开始请求:10:29:11.713
GotRequestHeaders:10:29:11.713
ClientDoneRequest:10:29:11.713
确定网关:0ms
DNS 查找:164 毫秒
TCP/IP 连接:74 毫秒
HTTPS 握手:0 毫秒
服务器已连接:10:29:11.953
FiddlerBeginRequest:10:29:11.953
服务器获得请求:10:29:11.953
服务器开始响应:10:29:12.372
GotResponseHeaders:00:00:00.000
服务器完成响应:10:29:12.372
客户端开始响应:10:29:12.385
ClientDoneResponse:10:29:12.385
总经过时间:0:00:00.672
响应在传递给客户端之前被缓冲。
== WININET 缓存信息 =============
WinINET 缓存中不存在此 URL。 [代码:2]
* 注意:以上数据显示的是 WinINET 当前的缓存状态,而不是请求时的状态。
* 注意:以上数据仅显示 WinINET 的中等完整性(非保护模式)缓存。
另外 - 504,这没有意义,因为我可以通过 chrome / firefox / ie 从链接获取数据...
我只是为了用其他语言工作,但我不得不用 C# 来做(我已经写了 2 个代码来重写它)
我添加了一些设置,比如提琴手说的
myHttpWebRequest1.ProtocolVersion = HttpVersion.Version11;
myHttpWebRequest1.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36";
myHttpWebRequest1.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
至少现在我得到 504 错误而不是“未知”,但我仍然可以通过 webbrowser 查看内容,所以 504 错误是假的
编辑:我添加时没有响应错误
myHttpWebRequest1.Headers["Accept-Encoding"] = "gzip";
但现在输出混乱且不可读
【问题讨论】:
-
不要过早断定这是一个 BCL 错误。更改请求标头会导致不同的错误这一事实有力地证明了服务器只是不喜欢您发送的内容。
-
我正在尝试发送我的网络浏览器发送的内容(至少是标题)。我始终遵循代码按照您编写的方式运行的规则。
-
安装补丁 support.microsoft.com/en-us/kb/3042058 后,我们在 .Net Framework 3.5 下使用 SSL (TLS 1.0) 时收到此消息。删除更新解决了问题。
标签: c# webclient downloadstring