VB.NET解决方案:服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF

引发的异常:“System.Net.WebException”(位于 System.dll 中)
服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF
   在 System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
   在 System.Net.WebClient.DownloadData(Uri address)

 

遇到这个问题很是头疼,原因是返回的ResponseHeader中Header名称有带空格的情况。

百度一番之后以为要调整Web服务器才,结果不是,简单改一下配置或者增加一些代码也能搞定,直接上代码,

 

方法一:

在获取网页源码之前,调用一次EnableUnsafeHeaderParsing

VB.NET:

''在模块或类文件的头部,添加两项导入
'Imports System.Reflection
'Imports System.Net.Configuration

    ''' <summary>
    ''' 允许非安全的Http返回头部
    ''' [C#]忽略在 HTTP 剖析期間發生的驗證錯誤 | Level Up - 點部落 https://dotblogs.com.tw/larrynung/2012/07/02/73168
    ''' 例如:http://lt.baiyou100.com/mod/lt/downlist_test.asp?s=init
    ''' </summary>
    ''' <returns></returns>
    Public Function EnableUnsafeHeaderParsing() As Boolean
        Dim assembly As Assembly = Assembly.GetAssembly(GetType(SettingsSection))
        If (assembly IsNot Nothing) Then
            Dim type As Type = [assembly].GetType("System.Net.Configuration.SettingsSectionInternal")
            If (type IsNot Nothing) Then
                Dim obj2 As Object = type.InvokeMember("Section", (BindingFlags.GetProperty Or (BindingFlags.NonPublic Or BindingFlags.Static)), Nothing, Nothing, New Object(0 - 1) {})
                If (obj2 IsNot Nothing) Then
                    Dim field As FieldInfo = type.GetField("useUnsafeHeaderParsing", (BindingFlags.NonPublic Or BindingFlags.Instance))
                    If (field IsNot Nothing) Then
                        field.SetValue(obj2, True)
                        Return True
                    End If
                End If
            End If
        End If
        Return False
    End Function

 

方法二:

找到生成或运行的程序目录,在程序所在位置找到 <程序同名>.exe.config ,用记事本打开后,在第三行位置追加以下内容:


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

追加之后的效果如下:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值