특정 항목에 대한 캐시를 플러시하는 CDN API를 요청하고 있습니다. 응답을 올바르게 구문 분석하려고하지만 응답이 잘못 표시되어서 반환되지 않을뿐 아니라 많은 양의 정보를 분석하는 데 어려움을 겪고 있습니다. 내 목표는 어떤 오류 코드와 함께 응답에서 실패한 플러시 목록을 얻는 것입니다.PHP는 CDN 플러시 API에서 XML/String 응답을 구문 분석합니다.
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에 있음을 주장한다 :
이
는 요청을 처리하기 위해 자신의 API에 대한 실행 URL의 종류입니다. 브라우저에 주소를 입력하면됩니다. 그러나 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';
이제는 단지 예입니다 두 성공 플러시. 나는 각각의 응답 문자열을 구문 분석하고 싶지 않아
0: Successful; 2: Successful only in some URLs; 999: Temporary Error; 194 Too many URLs
:이 API의 문서가 반환 될 수있는 추가 오류의 부하를 보여줍니다. 반환되는 첫 번째 부분은 resultCode이고 두 번째 부분은 totalURLNum, 세 번째 성공, 네 번째 실패 및 더 많은 정보가 포함 된 결과 목록입니다.
간단한 file_get_contents 요청 :
내 초기 PHP 코드는 문자열을 검색 할 수 있습니다.
$result = file_get_contents(urlencode($url));
그럼 내가 다시 몇 가지 RED TEXT있어!
나는 false로 CURLOPT_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을 돌려주지 않을 것이고 문자열은 분석 할 악몽이 될 것입니다. 나는까지 현재 해요 무엇
는 :
가 나는 컬 출력에 다음과 같은 PHP를 달렸다.
$dom = new DOMDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML($aData);
$dom->formatOutput = TRUE;
echo $dom->saveXml();
이
나에게 조금 더 형식화 된 출력을 준,하지만보기,! :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 유효성 검사기에 코드를 넣으면 false xml로 반환됩니다.
네임 스페이스를 검색 할 수는 있지만 XML에서 데이터를 가져올 수는 있습니다. XML이 유효하지 않습니다. 개발자 팀이이를 위해 노력하고 있습니다.
질문에서 질문자가 XML 구문 분석기에서 오류를 얻지는 않았지만 구문 분석 된 XML을 다시 에코하려고하고 있으며 자신이보고있는 내용을 이해하지 못하는 것입니다. – IMSoP
반환 된 XML 사용 시도를 여러 번 시도한 후에 실제로 유효한 XML이 아닌 것으로 판명되므로 일반 라이브러리를 사용하여 검색 할 수 없습니다. 나는 내가 XML로보고있는 것을 이해한다. 내 대답은 downvote 자격이되지 않습니다. – Jimbo
최근 수정 사항을 제외하고 원시 XML을 표시하기 위해 웹 브라우저를 사용하려고 시도하는 것 이외의 오류는 제안되지 않았습니다. XML 샘플이없고 오류 메시지가없고 "빨간색 텍스트"를 반복적으로 참조합니다. 텍스트 문자열에는 색상이 없으므로 실제 응답을 보지 않을 것을 강력하게 제안했습니다. 마지막 예제는 DOM 함수를 사용하여 파싱이 성공적이었다고 생각하는 것처럼 보였다. – IMSoP