- 動作確認日:2026-10-01
- n8nのバージョン:2.41.3(Docker、セルフホスト)
- PowerShell:Windows PowerShell 5.1
目次
起きたこと
必須の項目が欠けていたら 400 とエラーの理由を返す、n8nのワークフローを作りました。Windows PowerShell 5.1 の Invoke-WebRequest で、わざと項目を欠かしたデータを送って確かめたところ、400 は返ってきたものの、本文が空でした。
期待した本文:{"ok":false,"error":"name と message は必須です"}
実際に読めた本文:(空)
原因
n8n側の問題ではありませんでした。curl.exe で同じデータを送ると、本文は正しく返っていました。
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
{"ok":false,"error":"name と message は必須です"}
Windows PowerShell 5.1 では、Invoke-WebRequest が 400 などのエラーを受け取ると、例外になります。このとき、例外の中の応答から本文を読み直そうとしても、すでに読み終わっていて、空になることがあります。
対処
catch の中で、$_.ErrorDetails.Message から本文を取るようにしたところ、エラーの本文が読めるようになりました。
try {
$r = Invoke-WebRequest -Method Post -Uri $url -ContentType 'application/json; charset=utf-8' -Body $body -UseBasicParsing
$status = [int]$r.StatusCode
$text = [Text.Encoding]::UTF8.GetString($r.RawContentStream.ToArray())
} catch {
$status = [int]$_.Exception.Response.StatusCode
$text = $_.ErrorDetails.Message # エラーのときの本文はここに入っている
}
確かめるときのコツ
- まず
curl.exe -iで送ってみると、n8nが何を返しているかが、そのままわかります(Windows 10以降には、最初から入っています)。 - 日本語の本文は、
RawContentStreamからUTF-8として読むと、文字化けしません。
