引发的异常:“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>
追加之后的效果如下: