HttpClient,服务器违反协议 Section=ResponseHeader Detail=CR 后面必须跟LF

Posted

技术标签:

【中文标题】HttpClient,服务器违反协议 Section=ResponseHeader Detail=CR 后面必须跟LF【英文标题】:HttpClient, server committed a protocol violation Section=ResponseHeader Detail=CR must be followed by LF 【发布时间】:2013-09-02 20:00:54 【问题描述】:

我正在使用 HttpClient 通过 WiFi 与 GoPro 摄像机通信,但出现以下错误。 “服务器违反了协议。Section=ResponseHeader Detail=CR 必须后跟 LF” 虽然我已通知他们,但我无法更改 GoPro 的网络服务器,因此我需要在客户端。当我拨打这个电话时,使用 Fiddler 作为代理,Fiddler 纠正了这个问题,我的应用程序按预期运行。但如果没有提琴手,我会收到协议违规消息。

根据我所做的搜索,可以通过添加<httpWebRequest useUnsafeHeaderParsing = "true"/>(参见HttpWebRequestElement.UseUnsafeHeaderParsing Property)来解决此问题,但这是一个Windows 8 商店应用程序,没有配置文件。

一种选择是编写一个自定义处理程序并将其注入 HttpClient ctor,但我不确定从哪里开始使用我自己的自定义处理程序,这对于应该内置的东西来说似乎是一项巨大的努力。

有简单的解决办法吗?

【问题讨论】:

我在使用 Mashape API 的 Windows Phone 应用程序中遇到了类似的问题(它在 6 月底发生了变化)。很遗憾,微软拒绝让 Phone/Store 应用更宽松一点。 【参考方案1】:

我自己没有尝试过,但也许你可以通过这样的代码更改元素http://social.msdn.microsoft.com/Forums/en-US/ff098248-551c-4da9-8ba5-358a9f8ccc57/how-do-i-enable-useunsafeheaderparsing-from-code-net-20

【讨论】:

已经看过该选项,但这是一个 Windows 商店应用程序,并且 System.Net.Configuration 不存在 :-(【参考方案2】:

不幸的是,编写自己的处理程序也不起作用,因为在返回响应时,系统的HttpClientHandler 在您的自定义处理程序之前被调用。

对于 Windows 应用商店应用,您可以使用 MessageWebSocket:我尝试使用 StreamSocket 对 Windows Phone 8.1 Silverlight 进行类似的操作;见How can I accept "unsafe" HTTP response headers in a Windows Phone/Store app?

【讨论】:

以上是关于HttpClient,服务器违反协议 Section=ResponseHeader Detail=CR 后面必须跟LF的主要内容,如果未能解决你的问题,请参考以下文章

使用 HtmlAgilityPack 下载网页时违反 HTTP 协议

服务器违反了协议。 C# 中的 Section=ResponseStatusLine

C# SOAP Web 服务 服务器违反了协议。 Section=ResponseStatusLine

Windows Azure Web 角色 useUnsafeHeaderParsing="true" 无法正常工作,得到“服务器违反协议。Section=ResponseStatu

支持多种 TLS 协议的 HttpClient

Http协议以及Httpclient