PHP 解析来自 CDN Flush API 的 XML / 字符串响应

问题描述 投票:0回答:2

我正在向 CDN API 发出请求,该请求会刷新特定项目的缓存。我试图正确解析响应,但响应不仅返回错误(从我的角度来看),而且我正在努力解析如此大量的信息。我的目标是从响应中获取不成功刷新的列表以及任何错误代码。

这是您为他们的 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';

这只是两次“成功”同花的例子。 API 文档显示了可能返回的大量额外错误:

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

我不想为每个单独的响应解析字符串。返回的第一部分是 resultCode,第二部分是totalURLNum,第三部分成功,第四部分失败,然后是包含更多信息的结果列表。

我用于检索字符串的初始 PHP 代码:

一个简单的 file_get_contents 请求。

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

然后我收到了一些红色文本!!!

我使用 cURL 并将

CURLOPT_SSL_VERIFYPEER

CURLOPT_SSL_VERIFYHOST
设置为 false:

$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 验证器中,会返回错误的 xml。

可以检索命名空间,但这只是从 XML 中获取数据所能达到的程度。 XML 无效,开发团队正在处理此问题。

php xml parsing simplexml
2个回答
1
投票

尝试以下其中一项:

使用 HTML 实体转义 XML:
    echo htmlspecialchars($response)
  • 在浏览器中查看源代码
  • 告诉浏览器您正在向其提供 XML,而不是 HTML:
  • header('Content-Type: text/xml');
  • 
        

0
投票

尝试使用 xml 验证器来确保您确实正在尝试解析有效的 xml。

© www.soinside.com 2019 - 2024. All rights reserved.