0

特定のアイテムのキャッシュをフラッシュするCDNAPIにリクエストを送信しています。応答を正しく解析しようとしていますが、応答が(どのように見えるかから)誤って返されるだけでなく、そのような大量の情報を解析するのに苦労しています。私の目的は、エラーコードとともに、応答から失敗したフラッシュのリストを取得することです。

これは、APIがリクエストを処理するために実行するURLの種類です。

https://openapi.us.cdnetworks.com/OpenAPI/services/CachePurgeAPI/executeCachePurge?userId=***&password=***&purgeUriList=http://urlhere.com?param1=here&param2=here&purgeUriList=http:://url2here.com?param1=here

ドキュメントには、応答がXMLであると記載されています。ブラウザにアドレスを入力すると、どちらになりますか。しかし、PHPからリクエストを実行すると、XMLではないものが返されます。

次のようになります。

しかし、私が実際に取り戻すのはこれです:

000REQUEST ACCEPTEDhttp://cdn.oursite.com/blah.php?alt=1&cid=6291&campaign=126400&width=25010REQUEST ACCEPTEDhttp://cdn.oursite.co.uk/blah.php?alt=1&cid=6292&campaign=126401&width=250122';

これは、2回のフラッシュの成功例にすぎません。APIドキュメントには、返される可能性のある追加のエラーが多数示されています。

0: Successful; 2: Successful only in some URLs; 999: Temporary Error; 194 Too many URLs

個々の応答ごとに文字列を解析する必要はありません。返される最初の部分はresultCode、2番目はtotalURLNum、3番目は成功、4番目は失敗、そしてさらに多くの情報を含む結果リストです。

文字列を取得するための最初のPHPコード:

単純なfile_get_contentsリクエスト。

$result = file_get_contents(urlencode($url));

それから私はいくつかの赤いテキストを取り戻しました!!!

でcURLを使用し、 falseCURLOPT_SSL_VERIFYPEERに設定しました。CURLOPT_SSL_VERIFYHOST

$aData = curl_exec($rData);

そしてこれは赤いテキストを返しました:

string '<ns:executeCachePurgeResponse xmlns:ns="http://control.webif.server.openapi.cdnetworks.com"><ns:return xmlns:ax21="http://cachepurge.purge.response.server.openapi.cdnetworks.com/xsd" type="com.cdnetworks.openapi.server.response.purge.cachepurge.CachePurge"><ax21:failureURLNum>2</ax21:failureURLNum><ax21:resultCode>2</ax21:resultCode>(etc)(etc) (length=1678)

SimpleXMLを使用してみました:

だから私はこれにsimplexmlを使ってみました。私はもう試した:

$xml = simplexml_load_string($aData);

また

$properties = $xml->xpath('//Property');

SimpleXMLを使用して初期ファイルをロードしてみました。

$result = simplexml_load_file($url)

どうすればこれを解析できますか?私が望むようにXMLを取り戻せないことは明らかであり、文字列は解析するのに悪夢になるでしょう。

私が現在していること:

cURL出力で次のPHPを実行しました。

$dom = new DOMDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML($aData);
$dom->formatOutput = TRUE;
echo $dom->saveXml();

これにより、少しフォーマットされた出力が得られましたが、それでもXMLではないため、解析が容易ではありません!:

2 2 9999 Check your input. If it's not wrong, contact us please. http://cdn.whatever.co.uk/blah.php?alt=1&cid=6291&campaign=126400&width=250 0 0 REQUEST ACCEPTED http://cdn.whatever.co.uk/blah.php?alt=1&cid=6292&campaign=126401&width=250 1 9999 Check your input. If it's not wrong, contact us please. http://cdn.whatever.co.uk/blah.php?alt=1&cid=6291&campaign=126400&width=250 0 1 3

XMLのいずれかの側で使用<pre>し、ソースを表示してから、コードをXMLバリデーターに入れると、falsexmlであることが返されます。

名前空間は取得できますが、それはXMLからデータを取得できる範囲です。XMLは無効です。開発チームはこれに取り組んでいます。

4

2 に答える 2

1

あなたがしていることは、XMLをブラウザに直接エコーしようとしているようです。これを行うと、ブラウザはHTMLであると見なし、XMLタグは非表示になるため、間にテキストが表示されます。

次のいずれかを試してください。

  • HTMLエンティティでXMLをエスケープします。echo htmlspecialchars($response)
  • ブラウザでソースを表示
  • HTMLではなくXMLを提供していることをブラウザに伝えます。header('Content-Type: text/xml');
于 2012-10-04T15:30:08.867 に答える
0

simplexmlで適切に処理できない場合、返される「XML」は無効です。

xmlバリデーターを使用して、実際に有効なxmlを解析しようとしていることを確認してください。

于 2012-10-07T18:01:40.263 に答える