2012-10-04 2 views
0

특정 항목에 대한 캐시를 플러시하는 CDN API를 요청하고 있습니다. 응답을 올바르게 구문 분석하려고하지만 응답이 잘못 표시되어서 반환되지 않을뿐 아니라 많은 양의 정보를 분석하는 데 어려움을 겪고 있습니다. 내 목표는 어떤 오류 코드와 함께 응답에서 실패한 플러시 목록을 얻는 것입니다.PHP는 CDN 플러시 API에서 XML/String 응답을 구문 분석합니다.

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에 있음을 주장한다 :

는 요청을 처리하기 위해 자신의 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_VERIFYPEERCURLOPT_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이 유효하지 않습니다. 개발자 팀이이를 위해 노력하고 있습니다.

답변

0

'XML'이 (가) simplexml에서 제대로 처리 할 수없는 경우 올바르지 않습니다.

xml 유효성 검사기를 사용하여 유효한 xml을 실제로 구문 분석하려고하는지 확인하십시오.

+0

질문에서 질문자가 XML 구문 분석기에서 오류를 얻지는 않았지만 구문 분석 된 XML을 다시 에코하려고하고 있으며 자신이보고있는 내용을 이해하지 못하는 것입니다. – IMSoP

+0

반환 된 XML 사용 시도를 여러 번 시도한 후에 실제로 유효한 XML이 아닌 것으로 판명되므로 일반 라이브러리를 사용하여 검색 할 수 없습니다. 나는 내가 XML로보고있는 것을 이해한다. 내 대답은 downvote 자격이되지 않습니다. – Jimbo

+0

최근 수정 사항을 제외하고 원시 XML을 표시하기 위해 웹 브라우저를 사용하려고 시도하는 것 이외의 오류는 제안되지 않았습니다. XML 샘플이없고 오류 메시지가없고 "빨간색 텍스트"를 반복적으로 참조합니다. 텍스트 문자열에는 색상이 없으므로 실제 응답을 보지 않을 것을 강력하게 제안했습니다. 마지막 예제는 DOM 함수를 사용하여 파싱이 성공적이었다고 생각하는 것처럼 보였다. – IMSoP

1

XML을 브라우저에 직접 표시하려고하는 것처럼 들리는 것 같습니다. 그렇게하면 브라우저는 HTML로 간주하고 모든 XML 태그는 보이지 않으므로 중간에 텍스트가 표시됩니다.

다음 중 하나를 시도해보십시오

    는 HTML 엔티티로 XML 탈출
  • :
  • 당신이 그것을 XML을 제공하고있는 브라우저에게 브라우저에 echo htmlspecialchars($response)
  • 소스보기를하지 HTML : header('Content-Type: text/xml');
관련 문제