WordPressにXMLRPCで投稿しようとしたら「405 METHOD NOT ALLOWED」エラーになる
XMRPCでWordPressに投稿するプログラム。
ローカルで動かしているGAEの開発サーバーからだと正常に投稿できるのに、GAEにデプロイしたシステムから投稿しようとすると、「405 METHOD NOT ALLOWED」エラーになる。
どこでエラーになっているのかと、WordPressのソースで405を出しているところを全部チェックしたけど、どこも該当しない。
もしかして投稿元のIPアドレス?
WordPressのセキュリティ設定とか調べても該当箇所はない。
ロリポップにログインして管理画面を見ていると、海外アタックガードというところがあった。
≫ 海外アタックガードについて・設定・解除方法 / セキュリティ / マニュアル - レンタルサーバーならロリポップ!
ここで、ブログを動作させているドメインに対しては初期設定では「ガード有効」になっているので「無効にする」をクリック。
GAEからの投稿を試してみたら、あっさり成功。
でも海外アタックガードは有効にしておきたい。
ロリポップの海外アタックガードのマニュアルを見ると、特定のいくつかのURLがブロックされていて、その中に xmlrpc.php がある。
xmlrpc.php を別の名前のファイルにコピー。
$ cp xmlrpc.php hogehoge.php
で、ロリポップの設定で海外アタックガードを有効化する。
GAEから投稿するときに、投稿先URLでコピー先のファイルを指定すると、エラーなく投稿できた。
Spring Boot で javax.persistence パッケージでコンパイルエラーになる
専門学校で教えてて、数人が同じエラーを出していたのでメモ。
import javax.persistence.XXX; のところで「見つかりません」のエラーが発生。
ぐぐってみたら、ここがヒット。
≫ java - Spring Boot - javax Import statements not working correctly - Stack Overflow
単に、pom.xml に以下の依存関係を追加し忘れているだけだった。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
Matomo(アクセス解析ツール)にログインできない問題を解決した
Matomoというアクセス解析ツールを使ってるんだが、Chromeがパスワードを忘れてしまって、Matomoをアップデートした影響でログインできなくなってしまった。
パスワードをリセットしたのはいいが、「リンクを送信しました」とメッセージが出て、そのリンクをクリックしないとリセットしたパスワードが有効にならないらしい。
しかし、Matomoを設置しているVPSにはメールサーバーを設置してないから、メールを送信できない。
mysqlで直接パスワードを変更しても、そのパスワードが有効になってないらしく、ログインできない。
困った。
何か方法はないかと考えて、要するにメールで送信されているURLを取得すればなんとかなるだろうと思った。
パスワードをリセットしたあとにメールを送信しているところを検索する。
$ grep 'mail->send()' `find . -name '*.php' -print`
PasswordResetter.php というクラスでメールを送信しているらしいので、そこをちょっと変更する。
メールを送信したところで、メール本文をファイルに出力する。
@$mail->send();
error_log($bodyText, "3", "/tmp/matomo.log");
これで、パスワードをリセットしたときに送信される本文が保存された。
ファイルを開いて、リンク部分をコピーしてブラウザに貼り付けてアクセスしたら、無事に「パスワードが変更されました。」と表示されて、ログインできるようになった。
xmlrpc.phpで投稿するときに「parse error. not well formed」が出るときの対策
XMLRPCでWordPressに記事を投稿したときに、こんなエラーが出た。
うまくいくときもあれば、エラーになるときもある。
警告: main::Post 記事投稿で失敗, status=parse error. not well formed org.apache.xmlrpc.XmlRpcException: 構文解析エラー。not well formed at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:197)
HTMLタグが多いときに発生している雰囲気。
いろいろとぐぐってみたら、こんな対策が。
これの3番めにあるモジュールの訂正。
xmlrpc.php の27行目あたりを修正しろと。
この部分を、
$HTTP_RAW_POST_DATA = trim($HTTP_RAW_POST_DATA);
このように。
$HTTP_RAW_POST_DATA = mysql_escape_string(trim($HTTP_RAW_POST_DATA));
これで投稿はできるようになったけど、HTMLのタグがエスケープされててきちんと表示されないし。
だめじゃん。
で、いまのところ解決策は見つからないまま。
同じコードで問題なく記事を投稿できるWordPressもあるんだけど、できないWordPressもある。
いろいろと謎である。
タイトルに「対策」と書いたのに、対策を書けないまま。
タイトル詐欺である。
XMLRPCでカテゴリとタグ付きでブログ記事を投稿する方法
ブログに記事を投稿するのに、カテゴリとタグを指定して投稿しようとしたんだけど、なかなかうまくいかなくて試行錯誤して、やっとうまくいったのでまとめとく。
カテゴリとタグをString配列にしてMapに格納するのがポイントだったらしい。
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); String url = "http://memo.satoshis.jp/xmlrpc.php"; config.setServerURL(new URL(url)); XmlRpcClient client = new XmlRpcClient(); client.setConfig(config); Hashtable<Object,Object> hash = new Hashtable<>(); hash.put("post_title", title);// 記事のタイトル hash.put("post_content", contents);// 本文 hash.put("post_author", "1"); // hash.put("post_status", "publish"); // 一般公開 Map<String, Object> terms = new HashMap<>(); terms.put("category", categories); // カテゴリをString配列で terms.put("post_tag", tags); // タグをString配列で hash.put("terms_names", terms); Object[] params = new Object[5]; params[0] = "1"; // BlogID params[1] = "userid"; params[2] = "password"; params[3] = hash; params[4] = true; Object result = client.execute("wp.newPost", params);