HttpWebRequestError:服务器提交了协议违规。 Section = ResponseHeader Detail = CR必须后跟LF

时间:2009-09-29 10:50:43

标签: asp.net

我创建了一个示例asp.net应用程序,并尝试使用httpwebrequest从我的服务器中抓取数据。但有时我得到了上述错误。我在谷歌上做了一些搜索,但都说你应该在web.config中添加属性“<httpWebRequest useUnsafeHeaderParsing="true" />”。

这个属性有'UNSAFE'字样,所以我太担心了。我无法添加这个是我的网站配置。还有其他选项来读取我的scrape URL的响应。请让我知道如何没有“<httpWebRequest useUnsafeHeaderParsing="true" />

就可以实现

提前致谢, Laxmilal Menaria

4 个答案:

答案 0 :(得分:21)

这肯定是服务器问题 - 服务器没有遵循HTTP规范,.NET客户端将此标记为潜在问题。 “不安全”是我认为有点用词不当。这里没有一个很大的安全问题,只是不遵守RFC,这很糟糕,但遗憾的是并不罕见。

因此,正如您在Google中发现的那样,解决问题的方法是应用以下配置更改:

<configuration> 
 <system.net> 
  <settings> 
   <httpWebRequest useUnsafeHeaderParsing="true" /> 
  </settings> 
 </system.net> 
</configuration>

答案 1 :(得分:2)

调试此方法(并确保它是导致问题的协议违规)的一种方法是使用Fiddler(Http Web代理)并查看是否发生相同的错误。如果没有(即Fiddler为您处理了问题),那么您应该能够使用UseUnsafeHeaderParsing标志来修复它。

如果您正在寻找以编程方式设置此值的方法,请参阅此处的示例:http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline/

答案 2 :(得分:2)

另一种可能性:在执行POST时,服务器以100不正确的方式响应100。

这解决了我的问题:

request.ServicePoint.Expect100Continue = false;

答案 3 :(得分:0)

您可能要检查标题的内容。按照this link的建议尝试添加以下内容:

Accept: text/html, application/xhtml+xml, */*