我正在尝试使用wget / invoke-webrequest在嵌入式Web服务器上浏览命令。如何避免这种错误?
wget:服务器提交了协议违规。 Section = ResponseHeader Detail = CR必须后跟LF
已经尝试过多种方法,例如下面没有成功:
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
当使用BITS时,这就是我得到的错误
start-bitstransfer:服务器未返回文件大小。 URL可能指向动态内容。 Content-Length标头不可用 服务器的HTTP回复。
非常感谢你的帮助 克莱姆
答案 0 :(得分:8)
设置ServerCertificateValidationCallback
代理不会帮助您 - SSL / TLS 不正在引用的协议 - 协议违规与 HTTP <有关/ strong>标题(例如, TLS建立后的长)。
.NET configuration flag called useUnsafeHeaderParsing
可以控制是否忽略此类违规行为。
使用反射,也可以从运行时设置。 This Technet forum answer给出了如何在PowerShell中执行此操作的一个很好的示例,我们可以将其包装在如下的漂亮函数中:
function Set-UseUnsafeHeaderParsing
{
param(
[Parameter(Mandatory,ParameterSetName='Enable')]
[switch]$Enable,
[Parameter(Mandatory,ParameterSetName='Disable')]
[switch]$Disable
)
$ShouldEnable = $PSCmdlet.ParameterSetName -eq 'Enable'
$netAssembly = [Reflection.Assembly]::GetAssembly([System.Net.Configuration.SettingsSection])
if($netAssembly)
{
$bindingFlags = [Reflection.BindingFlags] 'Static,GetProperty,NonPublic'
$settingsType = $netAssembly.GetType('System.Net.Configuration.SettingsSectionInternal')
$instance = $settingsType.InvokeMember('Section', $bindingFlags, $null, $null, @())
if($instance)
{
$bindingFlags = 'NonPublic','Instance'
$useUnsafeHeaderParsingField = $settingsType.GetField('useUnsafeHeaderParsing', $bindingFlags)
if($useUnsafeHeaderParsingField)
{
$useUnsafeHeaderParsingField.SetValue($instance, $ShouldEnable)
}
}
}
}
然后使用:
Set-UseUnsafeHeaderParsing -Enable
在致电Invoke-WebRequest