当我收到ServerProtocolViolation异常时,如何获得响应?

时间:2015-08-06 18:25:43

标签: c# httpwebrequest system.net system.net.webexception

我正在尝试将HttpWebRequest发送到带有HTML服务器的远程传感器以撤回数据。

我认为问题在于Web服务器存在一些问题。我可以在Web浏览器中显示要呈现的网页,并且数据是可见的。那是我要解析并存储到关系数据库中的数据。

当我查看Fiddler中的响应头时,我可以看到它返回了500 Bad Response。所以,我认为正在进行的是,标题说Bad Response,但无论如何都包括有效的网页。

我认为我无法修复网络服务器。我想抓住数据并解析它。不幸的是,Response对象为null。

抛出的错误是WebExceptionStatus.ServerProtocolViolation,在catch分支中,Response为null。

在这种情况下我该怎么办?

更新:

另一个问题是没有HTML标记。以下是来自Fiddler的原始回复:

HTTP/1.1 500 Fiddler - Bad Response
Date: Thu, 06 Aug 2015 18:13:27 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Cache-Control: no-cache, must-revalidate
Timestamp: 14:13:27.775

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="refresh" content="5"/>
<meta http-equiv="cache-control" content="no-cache">
<title>IQS WebServer</title>
<style type="text/css">
    body {font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 0.8em;}
    table {/*font-size: 0.8em;*/ /*font-family: monospace;*/}
    .CaptionRow {font-weight:bold; background: #EFF3EB;}
    .OddRow {background: #EFF3EB;}
</style>
</head>

那里有一具尸体。

我不知道为什么它会抛出500而且为什么没有HTML标签,但我并不真正关心响应的形成有多么糟糕 - 我真的只是想得到响应和无论图书馆是否允许,都会处理其中包含的数据。响应为空,因此我被卡住了。

1 个答案:

答案 0 :(得分:0)

https://msdn.microsoft.com/en-us/library/65ha8tzh(v=vs.110).aspx &#34;默认情况下,.NET Framework严格执行RFC 2616以进行URI解析。某些服务器响应可能包含禁止字段中的控制字符,这将导致HttpWebRequest.GetResponse()方法抛出WebException。如果useUnsafeHeaderParsing设置为true,则HttpWebRequest.GetResponse()不会抛出此情况;但是,您的应用程序将容易受到多种形式的URI解析攻击。最好的解决方案是更改服务器,使响应不包含控制字符。&#34;

另一个常见的相关问题是仅发送LF行结尾的服务器,其中HTTP需要CRLF。您必须查看十六进制来区分它,否则它是不可见的。 useUnsafeHeaderParsing也应该有帮助。

相关问题