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