我通过HTTP POST将一些参数传递给网络服务器.
我得到了一个响应,但理想情况下我想要一个完整的XML响应,而我似乎只得到一个连接的字符串.我已经尝试过SimpleXMLElement,但它似乎没有做任何事情,并且它没有返回任何XML.
以下是我的代码:
$post_string = '<?xml version="1.0" encoding="utf-16" ?>
<ChameleonIAPI>
<Method>TitleList</Method>
<APIKey>D12E9CF3-F742-47FC-97CB-295F4488C2FA</APIKey>
<UserName>David</UserName>
<Filter>
</Filter>
</ChameleonIAPI>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://jobs.chameleoni.com/PostXML/PostXml.aspx");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
"Action=postxml&AuthKey=Guest&AuthPassword=KgwLLm7TL6G6&Xml=$post_string");
// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
$server_output = curl_exec ($ch);
echo $server_output." TEST <br />";
curl_close ($ch);
$oXML = new SimpleXMLElement($server_output);
foreach($oXML->entry as $oEntry){
echo $oEntry->title . "\n";
}
Run Code Online (Sandbox Code Playgroud)
这是您甚至可以测试POST和XML的页面.
https://jobs.chameleoni.com/PostXML/PostingXML.html
我的XML似乎没问题,因为它适用于测试页面.我认为我的PHP有问题,虽然我不知道那是什么!
任何帮助都很可爱!
您的代码检索完整的XML,看它写:
echo htmlentities( $server_output );
die();
Run Code Online (Sandbox Code Playgroud)
在浏览器中你会看到:
<?xml version ="1.0"encoding ="utf-16"?> <ChameleonIAPIResponse>
<标题> <TitleId> 1 </ TitleId> <TITLE> </ TITLE> <TitleId> 6 </ TitleId> <TITLE>先生</ TITLE> <TitleId> 2 </ TitleId> <TITLE>杜</ TITLE> <TitleId> 3 </ TitleId> <TITLE>小姐</ TITLE> <TitleId> 4 </ TitleId> <TITLE>女士</ TITLE> <TitleId> 5 </ TitleId> <TITLE>博士</ TITLE> <TitleId > 43 </ TitleId> <Title> Sir </ Title> </标题> </ ChameleonIAPIResponse>
问题是浏览器将您的输出解释为HTML,因此隐藏了标记(请参阅浏览器页面源,您将找到完整的XML).
此外,要在发送适当的标头之前将XML作为XML发送:
header( 'Content-type: text/xml' );
echo $server_output;
die();
Run Code Online (Sandbox Code Playgroud)
在上面的代码之前和之后没有其他输出,否则你的XML将被破坏.
如果您更喜欢SimpleXML,您可以这样做:
$oXML = new SimpleXMLElement( $server_output );
header( 'Content-type: text/xml' );
echo $oXML->asXML();
die();
Run Code Online (Sandbox Code Playgroud)
同样在这种情况下,之前和之后没有输出(所以注释前面的行).