gpt4 book ai didi

Powershell wget 协议(protocol)违规

转载 作者:行者123 更新时间:2023-12-04 14:10:41 25 4
gpt4 key购买 nike

我正在尝试使用 wget/invoke-webrequest 浏览嵌入式 Web 服务器上的命令。如何避免这个错误?

wget :服务器违反了协议(protocol)。 Section=ResponseHeader Detail=CR 后面必须跟 LF

已经尝试了多种方法,例如下面没有成功:

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

当使用 BITS 时,这是我得到的错误

start-bitstransfer :服务器没有返回文件大小。 URL 可能指向动态内容。 Content-Length header 在
服务器的 HTTP 回复。

非常感谢你的帮助
克莱姆

最佳答案

设置ServerCertificateValidationCallback委托(delegate)不会帮助你 - SSL/TLS 不是被引用的协议(protocol) - 协议(protocol)违规是关于 HTTP header (例如,在 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 之前

关于Powershell wget 协议(protocol)违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35260354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com