複数の外部Pingサーバーに更新Pingを送信したところその殆どがエラーになってしまいました。XML文法についての事がうといので下記コードのどこが悪いのか教えてください。


■送信内容
<?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

等など。エラーが出ないサーバもありました。
宜しくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/04/16 15:46:39
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:weLoge No.1

回答回数60ベストアンサー獲得回数0

ポイント35pt

送信したXMLの構文は完璧です。ページ名〜カテゴリー名までのXMLは、Pingの標準規格にも適合しています。送信したXMLについては、文句の付けようのない、満点のものです。

けれどエラーコードを見ると、XML解析に失敗しているようです。

このことから僕が考えつくエラーは、XMLの送信方法か文字コードのミスです。POSTで送信する前に、文字コードをUTF-8に変換してから送っているか確かめてみてください。おそらくこれで解決すると思います。

id:soyuz11

ご回答ありがとうございます。

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);

上記の流れから帰る各サーバのレスポンスをキャプチャした結果

件のエラーが出てしまったのです。

どうしてなのでしょうか。。。

ご教授くださいませ。

2006/04/13 12:05:00
id:wate_wate No.2

回答回数45ベストアンサー獲得回数3

ポイント35pt

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);

感じです。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません