質問
- Xmlrpc+sslがタイムアウトする
-
本文:
ミニバードでwordpressサイトを構築中です。
クライアントアプリからhttp://ドメイン名/xmlrpc.phpにメソッドを実行すると問題なく実行出来ますが、https://ドメイン名/xmlrpc.phpにするとクライアント側でリクエストタイムアウトになります。
https://ドメイン名/xmlrpc.phpへブラウザからはアクセス出来ます。
XML-RPC server accepts POST requests only.と表示
sslはsslボックスで取得しました。
- 緊急度:通常投稿者:Griffonixさん投稿時間:2015/08/25 08:57
回答 No.3783
-
本文:
# どんなクライアントを使っているのか書かないと...
ブラウザから、https://ドメイン名/xmlrpc.php にアクセスしたときは、 GET request だから、当然
XML-RPC server accepts POST requests only.
になるわね。
(こういうのも「アクセス出来ます」と言うかは別にして。)
- 投稿者:ジョバンニさん 投稿時間:2015/08/25 13:39
質問者からのコメント
回答有難うございます。
クライアントはiOSでSwiftからXMLRPCのライブラリをコールしてます。
Postメソッドになっていることは確認できてます。
どこらへんを調べれば良いかの当たりがついていないので、
取っ掛かりの情報でもあればありがたいです。
回答 No.3784
この回答がベストアンサーです
iOSもswiftも使っていないので、あまり適切なアドバイスはできないと思いますが、
> 取っ掛かりの情報でもあればありがたいです。
自分なら、次のようなスクリプトで、$schemaが httpの場合とhttpsの場合の結果を比べますね。
--- 8< ---- 8< ----
<?php
function do_call($host, $schema, $request) {
$url = $schema."://$host/xmlrpc.php";
$header=array();
$header[] = "Content-type: text/xml";
$header[] = "Content-length: ".strlen($request);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
$data = curl_exec($ch);
echo $data;
if (curl_errno($ch)) {
print curl_error($ch);
} else {
curl_close($ch);
return $data;
}
}
$blog_id=0;
$username='xxxx';
$password='zzzz';
$post_id=493; // 適当に
$host='example.jp'; // ドメイン名
$schema='http';
$request = xmlrpc_encode_request('wp.getPost',
array($blog_id,$username, $password,$post_id));
//echo "request=".$request."\n";
$response = do_call($host, $schema, $request);
---- >8 ---- >8 ----
minibirdでは試していませんが、他のサイトでは、特に違いは無い出力になりました。
ちなみに、ヘッダを除けば、こんな感じになります。
--- 8< ---- 8< ----
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member><name>post_id</name><value><string>493</string></value></member>
<member><name>post_title</name><value><string>test</string></value></member>
<member><name>post_date</name><value><dateTime.iso8601>20141207T17:31:53</dateTime.iso8601></value></member>
<member><name>post_date_gmt</name><value><dateTime.iso8601>20141207T08:31:53</dateTime.iso8601></value></member>
<member><name>post_modified</name><value><dateTime.iso8601>20141207T17:31:53</dateTime.iso8601></value></member>
<member><name>post_modified_gmt</name><value><dateTime.iso8601>20141207T08:31:53</dateTime.iso8601></value></member>
<member><name>post_status</name><value><string>publish</string></value></member>
<member><name>post_type</name><value><string>post</string></value></member>
<member><name>post_name</name><value><string>test</string></value></member>
<member><name>post_author</name><value><string>1</string></value></member>
<member><name>post_password</name><value><string></string></value></member>
<member><name>post_excerpt</name><value><string></string></value></member>
<member><name>post_content</name><value><string>test</string></value></member>
<member><name>post_parent</name><value><string>0</string></value></member>
<member><name>post_mime_type</name><value><string></string></value></member>
<member><name>link</name><value><string>https://www.alpha.seg.co.jp/test/</string></value></member>
<member><name>guid</name><value><string>http://demo.seg.co.jp/?p=493</string></value></member>
<member><name>menu_order</name><value><int>1</int></value></member>
<member><name>comment_status</name><value><string>closed</string></value></member>
<member><name>ping_status</name><value><string>closed</string></value></member>
<member><name>sticky</name><value><boolean>0</boolean></value></member>
<member><name>post_thumbnail</name><value><array><data>
</data></array></value></member>
<member><name>post_format</name><value><string>standard</string></value></member>
<member><name>terms</name><value><array><data>
<value><struct>
<member><name>term_id</name><value><string>1</string></value></member>
<member><name>name</name><value><string>未分類</string></value></member>
<member><name>slug</name><value><string>%e6%9c%aa%e5%88%86%e9%a1%9e</string></value></member>
<member><name>term_group</name><value><string>0</string></value></member>
<member><name>term_order</name><value><string>0</string></value></member>
<member><name>term_taxonomy_id</name><value><string>1</string></value></member>
<member><name>taxonomy</name><value><string>category</string></value></member>
<member><name>description</name><value><string></string></value></member>
<member><name>parent</name><value><string>0</string></value></member>
<member><name>count</name><value><int>2</int></value></member>
<member><name>filter</name><value><string>raw</string></value></member>
</struct></value>
</data></array></value></member>
<member><name>custom_fields</name><value><array><data>
</data></array></value></member>
</struct>
</value>
</param>
</params>
</methodResponse>
---- >8 ---- >8 ----
質問者からのコメント
ありがとうございます。
サーバーとのSSL通信を実装するのが初めてなので色々と調べてみたところ、
iOSからhttps通信を行うためには公開鍵の発行などが必要なことがわかりました。
(考えてみたら当たり前ですが。。)
そのためhttpではうまくいっていて、httpsではうまくいっていないと思われます。
httpではレスポンスは返ってきますが、responseは返ってこなくエラーとなってしまいます。
もともとの質問の疑問は晴れましたので質問は完了させていただきます。
証明書の発行はよくわからないので、またわからないときは別途質問を立てます。
ありがとうございました。