The Processing Instruction Target Matching “[xX][mM][lL]” is Not Allowed

Youtube Data APIで動画の更新をしようとXMLをPUTで送信しようとしたら上記のエラー。ステータスは400でBad request扱い。色々探したら、原因が分かりました。
どうやら、XMLの前に余計な文字列が送信されているためのエラーらしい。

Rubyの便利ヒアドキュメントが裏目に

Rubyでのヒアドキュメントで便利なのは、以下のようにインデントできるタイプ。

def xxx
  s = <<-EOS
    
    ...
  EOS
end

ただ、ここでヒアドキュメントで生成した文字列を確認してみると、XMLの前にきっちりインデント文字が生成されてました。

\t\t

これのせいですね。というわけで以下のように変更して事なきを得ました。イージーなミスを・・・

def xxx
  s = <<-EOS

...
  EOS
end

コードが「うーん」という状態になりますが、いたしかたありません。