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

    ''' 
    ''' 允许非安全的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
    ''' 
    ''' 
    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 ,用记事本打开后,在第三行位置追加以下内容:


    
       
            
       
    

追加之后的效果如下:

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

 

你可能感兴趣的:(VB源码)