人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

複数の外部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

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

●質問者: soyuz11
●カテゴリ:インターネット ウェブ制作
✍キーワード:accept application AT byte D dur
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● weLoge
●35ポイント

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

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

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

◎質問者からの返答

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

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

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

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

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

ご教授くださいませ。


2 ● ワテ
●35ポイント

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

感じです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ