2016-02-07 37 views
5

wget/invoke-webrequestを使用して、組み込みWebサーバー上のコマンドを参照しようとしています。このエラーはどのようにして回避できますか?Powershell wgetプロトコル違反

wget:サーバーがプロトコル違反をコミットしました。

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

代わりにBITSを使用している場合、これは私が

を取得していますエラーです:セクション= ResponseHeader詳細= CRはすでに成功せず、以下の例のために、複数のものを試してみましたLF
によって

を続けなければなりません

start-bitstransfer:サーバーがファイルサイズを返しませんでした。 URLが動的コンテンツを指している可能性があります。 Content-Lengthヘッダーは、サーバーのHTTP応答 では使用できません。 ServerCertificateValidationCallbackデリゲートを設定するあなたの助け

ありがとうを クレム

+0

を呼び出す前に

Set-UseUnsafeHeaderParsing -Enable 

2つのクライアントを試しました:[wget](https://www.gnu.org/software/wget/)(Powershell製)と[Microsoft BITS](https://msdn.microsoft.com/en-us/)ライブラリ/ aa362708%28v = vs.85%29.aspx)。いずれの場合も、サーバーから「プロトコルエラー」が発生します。 Hmmm .... Q:コマンドラインや.batファイルからwgetを実行するとどうなりますか? Q:* ANY *クライアントからサーバーと正常に通信できますか? Q:サーバーは何をやっているのですか?失敗したレスポンスとはまさに* IS *なので、どのように実装されていますか? – paulsm4

+0

@ paulsm4 wgetは 'Invoke-WebRequest'にエイリアスされます –

+0

これは正しいことですが、両方で同様の問題があります。 WiFi対応カメラから写真をダウンロードしようとしています。組み込みサーバーへの接続は問題ありません。私はLinuxでwgetを使ってこれと同じことをするとうまくいく。しかし、BITSを使うことを好むでしょう。 – clem

答えて

6

はあなたを助けにはなりません - SSL/TLSは言及されていないプロトコルです - プロトコル違反がHTTPに関してですヘッダ(例えば、 TLSが確立された後)。

このような違反を無視するかどうかを制御する.NET configuration flag called useUnsafeHeaderParsingがあります。

リフレクションを使用すると、ランタイムから設定することもできます。

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) 
      } 
     } 
    } 
} 

をそして同様に使用します:This Technet forum answerギブはPowerShellでこれを行う方法の良い例ですが、私たちは以下のように気の利いた機能であることをラップすることができますので、Invoke-WebRequest

+0

クイック返信ありがとう リフレクションを使用しているときに、私が解決できないこのエラーが発生しました "2"引数を使用して "SetValue"を呼び出す例外: "Object of type 'System.Management.Automation。SwitchParameter 'をタイプ ' System.Boolean 'に変換できません。 – clem

+0

@clemこれを避けるためにスクリプトを更新しました。 –

+0

これは、ありがとうございました@Mathias !! – clem

関連する問題