■送信内容
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
<param>
<value>□□□□株式会社</value>
</param>
<param>
<value>http://www.url.jp/</value>
</param>
<param>
<value>http://www.url.jp/</value>
</param>
<param>
<value>商品案内</value>
</param>
</params>
</methodCall>
■エラー
・fault code 104:XML error: Empty document at line 1
・flerror true:Cannot accept the ping because an error occurred.
・fault code (int)5:xml parse error: syntax error on line 1
・faultCode (int)2:The method you requested, , was not found.
・faultCode -503:syntax error
・faultCode (int)104:XML error: Empty document at line 1
・faultCode -32700:parse error. not well formed
・faultString:Application failed during request deserialization:
syntax error at line 1, column 0, byte 0 at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/XML/Parser.pm line 187
等など。エラーが出ないサーバもありました。
宜しくお願いします。
・
送信したXMLの構文は完璧です。ページ名〜カテゴリー名までのXMLは、Pingの標準規格にも適合しています。送信したXMLについては、文句の付けようのない、満点のものです。
けれどエラーコードを見ると、XML解析に失敗しているようです。
このことから僕が考えつくエラーは、XMLの送信方法か文字コードのミスです。POSTで送信する前に、文字コードをUTF-8に変換してから送っているか確かめてみてください。おそらくこれで解決すると思います。
PHPでの開発ということであれば
PEARのXML-RPCを使ってみたらいかがでしょう?
私も同じようなエラーにかなり悩まされ、
原因の解決に時間がかかりそうだったので
取りあえず、PEARのXML-RPCを使用する方法で
逃げました。
(根本的な原因解決とはいえませんが・・・)
XML_RPC
http://pear.php.net/package/XML_RPC
コード的には
require_once("XML/RPC.php");
$client = new XML_RPC_Client($path,$ping_host);
$msg = new XML_RPC_Message("weblogUpdates.ping",array(new XML_RPC_Value(更新ping送信先)));
$msg->addParam(new XML_RPC_Value(第1パラメーター));
$msg->addParam(new XML_RPC_Value(第2パラメーター));
$msg->addParam(new XML_RPC_Value(第3パラメーター));
$msg->addParam(new XML_RPC_Value(第4パラメーター));
$client->send($msg,10);
感じです。
ご回答ありがとうございます。
UTF-8への変換も行っているんです。
文字コードをダンプしても'UTF-8'と表示されています。
実際に行っている手順としましては、
PHPを使用言語とし、
(1)PINGデータの文字列を作成後、utf-8に変換
$ping = mb_convert_encoding($buf,'UTF-8','EUC-JP');
(2)POST用送信ヘッダを作成(↓内容)
これもutf-8 変換して上記の$pingと連結
POST postDir/ HTTP/1.0
Host: ping.net
Content-Type: text/xml; charset=utf-8
Content-Length: 1449
(3)curl関数でPOST
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $ping);
上記の流れから帰る各サーバのレスポンスをキャプチャした結果
件のエラーが出てしまったのです。
どうしてなのでしょうか。。。
ご教授くださいませ。