我通过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";
}
这是您甚至可以测试POST和XML的页面。
https://jobs.chameleoni.com/PostXML/PostingXML.html
我的XML似乎没问题,因为它适用于测试页面。我认为我的PHP有问题,虽然我不知道那是什么!
任何帮助都很可爱!
答案 0 :(得分:6)
您的代码检索完整的XML,看它写:
echo htmlentities( $server_output );
die();
在浏览器中你会看到:
&lt;?xml version =“1.0”encoding =“utf-16”?&gt; &LT; ChameleonIAPIResponse&GT;
&LT;标题和GT;&LT; TitleId→1&LT; / TitleId&GT;&LT;名称&GT;&LT; /标题&GT;&LT; TitleId→6&LT; / TitleId&GT;&LT;名称&GT;先生&LT; /标题&GT;&LT; TitleId→2&LT; / TitleId&GT;&LT;名称&GT;杜&LT; /标题&GT;&LT; TitleId→3&LT; / TitleId&GT;&LT;名称&GT;小姐&LT; /标题&GT;&LT; TitleId→4&LT; / TitleId&GT;&LT;名称&GT;女士&LT; /标题&GT;&LT; TitleId&GT ; 5'; / TitleId&GT;&LT;名称&GT; DR&LT; /标题&GT;&LT; TitleId&GT; 43&LT; / TitleId&GT;&LT;名称&GT;爵士&LT; /标题&GT;&LT; /标题和GT; &LT; / ChameleonIAPIResponse&GT;
问题是浏览器将您的输出解释为HTML,因此隐藏了标记(请参阅浏览器页面源代码,您将找到完整的XML)。
此外,要在发送适当的标头之前将XML作为XML发送:
header( 'Content-type: text/xml' );
echo $server_output;
die();
上面代码之前和之后没有其他输出,否则你的XML会被破坏。
如果您更喜欢SimpleXML,可以这样做:
$oXML = new SimpleXMLElement( $server_output );
header( 'Content-type: text/xml' );
echo $oXML->asXML();
die();
同样在这种情况下, 之前和之后没有输出(因此请注释前一行)。
答案 1 :(得分:0)
您需要传递Content-Type
标头,其值为application/x-www-form-urlencoded
此外,xml
有效负载需要进行urlencoded。
示例$post_string
与您的问题相同
$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_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_POSTFIELDS,
"Action=postxml&AuthKey=Guest&AuthPassword=KgwLLm7TL6G6&Xml=" . urlencode($post_string));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
$server_output = curl_exec ($ch);
curl_close ($ch);
var_dump($server_output);
将输出
string(374) "<?xml version="1.0" encoding="utf-16" ?>
<ChameleonIAPIResponse>
<Titles><TitleId>1</TitleId><Title></Title><TitleId>6</TitleId><Title>Mr</Title><TitleId>2</TitleId><Title>Mrs</Title><TitleId>3</TitleId><Title>Miss</Title><TitleId>4</TitleId><Title>Ms</Title><TitleId>5</TitleId><Title>Dr</Title><TitleId>43</TitleId><Title>Sir</Title></Titles>
</ChameleonIAPIResponse>"