プロトコル違反例外...Section=ResponseHeader Detail=CR の後には LF...の対処方法 †
PowerShellでInvoke-RestMethodやInvoke-WebRequestなどを使って、リクエストしたとき、以下のような例外が発生したときの対処方法を記します。
Invoke-RestMethod : サーバーによってプロトコル違反が発生しました. Section=ResponseHeader Detail=CR の後には LF を指定しなければなりません。
参考記事 †
関連記事 †
例外発生原因 †
リクエストから返却されたデータをInvoke-RestMethodやInvoke-WebRequestで検証するとHTTPプロトコル違反のため例外が発生していると考えられます。
HTTPプロトコル違反を無視する †
以下のメッセージが表示されないように、プロトコル違反による例外を無視するように設定する手順を以下に記します。
Invoke-RestMethod : サーバーによってプロトコル違反が発生しました. Section=ResponseHeader Detail=CR の後には LF を指定しなければなりません。~
(本来、サーバー側で対処すべきですが…)
powershell.exe.configを修正する †
- powershell.exe.configファイルにアクセスできるようにする
プロトコル違反による例外を無視するため、powershell.exe.configファイルに追記します。
しかし、デフォルトではファイルの編集許可がないため、追記することができません。
以下のリンク記事を参考にpowershell.exe.configファイルの編集権限を付与してください。
- powershell.conf.configに以下の設定を追記します。
追記後、上書き保存してください。
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
追記する場所は、<configuration>..</configuration>の中になります。
- 修正前
<configuration>
<uri>
<schemeSettings>
<add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/>
<add name="https" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/>
</schemeSettings>
</uri>
</configuration>
- 修正後
追記情報<system.net>...</system.net>を<configuration>..</configuration>の中に追記しています。
<configuration>
<uri>
<schemeSettings>
<add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/>
<add name="https" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/>
</schemeSettings>
</uri>
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
</configuration>
- PowerShellコンソールが起動中であれば、終了して、再度PowerShellを起動してください。
尚、今回はpowershell.exe.configの修正でしたが、他のアプリケーションの場合やアプリケーション開発場合は、
アプリケーション.exe.configを修正することになります。