Powershell wget协议违规

cle*_*lem 6 powershell wget

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

wget:服务器提交了协议违规.Section = ResponseHeader Detail = CR必须后跟LF

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

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Run Code Online (Sandbox Code Playgroud)

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

start-bitstransfer:服务器没有返回文件大小.URL可能指向动态内容.Content-Length标头在服务器的HTTP回复中不可用.

非常感谢你的帮助克莱姆

Mat*_*sen 9

设置ServerCertificateValidationCallback委托对您没有帮助 - SSL/TLS 不是所引用的协议 - 协议违规与HTTP标头有关(例如,在建立TLS 之后很久).

有一个.NET 配置标志useUnsafeHeaderParsing,用于控制是否忽略此类违规.

使用反射,也可以从运行时设置.这个Technet论坛的答案给出了一个如何在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)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用像:

Set-UseUnsafeHeaderParsing -Enable
Run Code Online (Sandbox Code Playgroud)

在打电话之前 Invoke-WebRequest