wordpressのXML-RPCレスポンスが欠ける

ちと、メモ的に。

IIS 7.0 上に WordPress 3.0 を入れた状態で、XML-RPC を使って投稿しようとすると、レスポンスが2バイト欠けます。

故に、

Response from server does not contain valid XML.

なるエラーが出ます。

XML-RPC.NET ライブラリを試しても、BlogWrite を試しても駄目なので、おそらく、IIS + PHP + wordpress の組み合わせが駄目です。


<?xml version=”1.0″?>
<methodResponse>
  <params>
    <param>
      <value>
        <array><data>
  <value><struct>
  <member><name>isAdmin</name><value><boolean>1</boolean></value></member>
  <member><name>url</name><value><string>http://localhost/wp/</string></value></member>
  <member><name>blogid</name><value><string>1</string></value></member>
  <member><name>blogName</name><value><string>local blog</string></value></member>
  <member><name>xmlrpc</name><value><string>http://localhost/wp/xmlrpc.php</string></value></member>
</struct></value>
</data></array>
      </value>
    </param>
  </params>
</methodRespons

こんな風に最後の2バイトが欠けます。おそらく、UTF-8 BOM の分だけ加算し忘れて、content-length が間違っているかと。

同じソースを動かしても、linux 上の wordpress は ok です。

ソース自体は、

.NET(C#)でXML-RPCを使ってブログに投稿する | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/1284

を参照。

エラーの回避方法は分からず。

環境としては、

  • windows 7
  • PHP 本家(MSのPHPではない)
  • WordPress 本家(MSのPHPではない)
  • IIS 7.0

ですね。他の組み合わせでは未定です。

追記 2010/09/14

解決法を見つけました。

wp-includes/class-IXR.php の 339 行目あたりに、XML-RPCのレスポンスを返しているので、


        // Create the XML
        $xml = <<<EOD
<methodResponse>
  <params>
    <param>
      <value>
        $resultxml
      </value>
    </param>
  </params>
</methodResponse>



EOD;
        // Send it
        $this->output($xml);
    }

のように、</methodResponse> の後ろに2バイト分、改行を増やしてやります。

本来はlengthを変えるところなのですが、乱暴ですが、これでIISでも動きます。

カテゴリー: Wordpress パーマリンク

wordpressのXML-RPCレスポンスが欠ける への4件のフィードバック

  1. konica のコメント:

    IISは鬼門だとゴーストが囁きます。
    えぇ・・・囁きますとも。

  2. masuda のコメント:

    ふふふ、伊達にWindows+IIS環境で過している訳ではありません。
    解決方法を見つけましたぜッ!!!

    WAMPを入れろと、ゴーストは囁きますがw

  3. ピンバック: Live WriterでWordpressの既存記事の編集が出来ない件 | トトといっしょ。

  4. ピンバック: WordPressでWindowsLiveWriterが使えない人は試してみるべき策 | WordPress技術情報 | 株式会社チョイスOKUDA

コメントは停止中です。