HTTPでXMLを送信したら、The Processing Instruction Target Matching “[xX][mM][lL]” is Not Allowed
2013.02 27

Rubyで次々とXML送信するバッチスクリプトを書いていたところ、Net::HTTP#putの利用時にステータス400。ふたを開けてみると、なんということはない内容でした。

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

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

この記事へのコメント

この記事にコメントを投稿する

作者について

青森県内でソフトウェア・システム開発を行うフリーランスのプログラマー。元々は集中監視システム開発に従事。現在はウェブサイト製作・オンラインシステムの開発案件を中心に、プログラミングのスキルトレーニングや講演も行う。

TEL 0172-55-7030  FAX 0172-55-7031
10:00 - 18:00 土日祝休

恐れ入りますが、お急ぎの場合を除いて、メールにてお問い合わせください。