xml-rpcを使ってwordpressにリモート投稿や更新をしようとしたが失敗するときは.htaccessファイルのhttpsへの転送設定が原因かも
以前から定期的にlinuxのphp(IXR_Library(IXR_Client))を使ってWordpressのxmlrpc.phpに対して記事の更新命令を送って自動更新していましたが、ある日からエラーが出て更新できなくなりました。
エラーメッセージは、
-32300 : transport error – HTTP status code was not 200]
です。
で色々調べましたが、結局、.htaccessファイルに記載したhttpsへの転送設定が起因していました。
目次
エラーの原因は.htaccessファイルに記載したhttpsへの転送設定が起因
具体的には、WordpressのSSL化を徹底するために、httpでアクセスが来た際、httpsに301リダイレクトする設定を入れたことが原因でした。
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
これを入れてなければ正常動作し、これを入れるとエラーが出る状況となりました。
リダイレクトするとpostがgetに変わる
細かな挙動の詳細はつぶし切れていませんが、エラーに至る挙動は大筋で以下となります。
1.IXR_Libraryで対象サーバのxmlrpc.phpにアクセスする
2..htaccessファイルのリダイレクト設定で301リダイレクトされる
3.301リダイレクトの際、methodがpostからgetに変わる(←ここがみそ)
4.xmlrpc.phpに対しgetでアクセスすると、httpコードが200ではなく405を返す
xmlrpc.phpへgetでアクセスすると200ではなく405を返してエラーになる
いくつかポイントがありますが、まず最初の1の段階でhttpsにアクセスしているのですがなぜか2で301リダイレクトが入っているようです(詳細挙動は確認しきれず)。
次に3ですが、もともとIXR_Libraryでpostでアクセスしていたのが、リダイレクトの際に、getに変わるようです。
参考:
https://havelog.ayumusato.com/develop/others/e172-http-request-trans.html
最後に4ですが、どうもxmlrpc.phpへのアクセスはpostでないといけないらしく、getでアクセスすると405を返してきます。
これがIXR_Libraryを使ったWordppress記事更新がエラーになった原因です。
解決方法についてですが、暫定的には、.htaccessのリダイレクト設定をはずすことも考えられますが、これはこれで目的があるので、別の方法を調査中です。