我正在向 CDN API 发出请求,该 API 会刷新特定项目的缓存。我正在尝试正确解析响应,但响应不仅返回不正确(从我的角度来看),而且我正在努力解析如此大量的信息。我的目标是从响应中获取不成功的刷新列表以及任何错误代码。
这是您为他们的 API 运行以处理请求的 URL:
https://openapi.us.cdnetworks.com/OpenAPI/services/CachePurgeAPI/executeCachePurge?userId=***&password=***&purgeUriList=http://urlhere.com?param1=here¶m2=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));
然后我得到了一些红色文本!!!
我使用 cURLCURLOPT_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 验证器,返回它是 false xml。
可以检索命名空间,但这只是从 XML 中获取数据的范围。XML 无效,开发团队正在处理此问题。