从其他服务器请求XML数据

时间:2017-07-30 23:46:34

标签: php xml api dns

我正在尝试使用Namecheap的API来获取域名信息,虽然他们的API文档没有解释得很好,而且这是我第一次使用XML数据,我试过从XML文件返回数据。

我目前正在使用表单向此XML请求添加变量和POST / GET数据,在提交时,显示XML页面,这就是结束。

我想知道如何使用PHP发送和接收这些数据?

这是我到目前为止所拥有的......

非常简单:

<form action="https://api.namecheap.com/xml.response" method="POST">
              <input type="hidden" id="ApiUser" name="ApiUser" value="user" />
              <input type="hidden" id="UserName" name="UserName" value="user" />
              <input type="hidden" id="ApiKey" name="ApiKey" value="###" />
              <input type="hidden" id="Command" name="Command" value="namecheap.domains.check" />
              <input type="hidden" id="ClientIp" name="ClientIp" value="<? echo $_SERVER['REMOTE_ADDR']; ?>" />
              <input type="text" id="DomainList" name="DomainList"  />
              </form>

就像我说的,这直接发送给我的XML文件。我想我可能需要执行POST ISSET或其他......

<?
if(isset($_POST['domain_check'])){
   PERFORM XML STUFF HERE
}
?>

然而,我不知道如何以这种方式发送或接收数据,因为我是初学者。数据返回如下:

<ApiResponse xmlns="http://api.namecheap.com/xml.response" Status="OK">
<Errors/>
<Warnings/>
<RequestedCommand>namecheap.domains.check</RequestedCommand>
<CommandResponse Type="namecheap.domains.check">
<DomainCheckResult Domain="test.com" Available="false" ErrorNo="0" Description="" IsPremiumName="false" PremiumRegistrationPrice="0" PremiumRenewalPrice="0" PremiumRestorePrice="0" PremiumTransferPrice="0" IcannFee="0" EapFee="0"/>
</CommandResponse>
<Server>PHX01APIEXT01</Server>
<GMTTimeDifference>--4:00</GMTTimeDifference>
<ExecutionTime>1.061</ExecutionTime>
</ApiResponse>

请告诉我最好的方法吗?谢谢。

1 个答案:

答案 0 :(得分:0)

要解析响应,请尝试使用simple_xml,

$xml=simplexml_load_string($myXMLData) or die("Error: Cannot create object");
print_r($xml);

尝试使用cURL,因此您不必手动提交表单,我还没有对此进行过测试,但此示例应该可以帮助您实现目标

<?php

 $ch = curl_init();

 $baseUrl = 'https://api.sandbox.namecheap.com/xml.response?ApiUser=ncuser&ApiKey=apikey&UserName=ncuser&ClientIp=121.22.123.22&Command=namecheap.domains.check&DomainList=domain1.com,domain2.com';


 $url = $baseUrl . $query;

 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 $output = curl_exec($ch);
 if ($output === false) {
     die(curl_error($ch));
 }
 //print_r(curl_getinfo($ch));
 curl_close($ch);
 return $output;