【问题标题】:The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF, In WinForms?服务器违反了协议。 Section=ResponseHeader Detail=CR 后面必须跟 LF,在 WinForms 中?
【发布时间】:2023-03-31 17:18:01
【问题描述】:

我正在尝试使用 WebClient / HttpWebRequest 从服务器下载一些数据。我使用以下代码:

WebClient client = new WebClient();
client.Credentials = new NetworkCredential("admin", "password");
Stream datastream = client.OpenRead("http://routerlogin.com/cgi-bin/CF_logs.html");
StreamReader reader = new StreamReader(datastream);

服务器是我的页面在我的路由器配置中。它在浏览器上运行良好,但是当使用我的代码下载时,它会抛出带有消息的WebException

服务器违反了协议。 Section=ResponseHeader Detail=CR 后面必须跟 LF,在 WinForms 中?

如果他们使用 ASP.net,我找到了一种解决方案,将以下内容添加到 web.config:

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

但是,我正在制作一个 WinForms 应用程序,所以这对我不起作用。有什么方法可以解决这个问题?

【问题讨论】:

  • 这应该适用于所有类型的应用程序,而不仅仅是 asp.net
  • 我应该在哪里添加它?没有 web 或 app.config。
  • 我遇到的奇怪的事情是,在我们网络的一台电脑上出现该错误,但另一台具有相同应用程序的电脑工作正常。当我添加上面提到的条目时,pc 也开始正常工作。问题是为什么这个问题只是在单台电脑上(确实有新安装)
  • 只是想补充一下我的经验,这与 Kamran Shahid 相同,实际上所有其他计算机都可以工作,但我的却没有。我唯一的猜测是我在 Fiddler 中看到的奇怪字符,当我检查响应标头时,并且在其中一个 set-cookie 传递的中间。 Notepad++ 将这个特殊的字符渲染为 SOH,我用谷歌搜索它是标题的开始。 [链接]eureka.greenhead.com/… 读完这篇文章后,我不确定除了服务器还有很多其他事情要做。上面的配置更改没有解决它。

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


【解决方案1】:

首先,添加 app.config 文件就像添加任何其他文件一样简单,How to: Add an Application Configuration File to a C# Project

然后你只需要将上面的代码 sn-p 添加到新的 app.config 中。

通过代码设置该属性的另一种方法,避免了对 app.config 的需要,显示为 herehere

【讨论】:

    【解决方案2】:

    您的问题可能不需要任何 app.config 更改(在我的情况下,此配置更改没有任何区别)。我会尝试修改您的 Accept: 标头,如建议的 in this link.

    就我而言,我直接创建了一个 HttpWebRequest,所以我的解决方案是添加以下内容:

    request.Accept = "text/html, application/xhtml+xml, */*"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2013-01-29
      • 2011-01-29
      • 1970-01-01
      相关资源
      最近更新 更多