2011-07-21 119 views
0

我正在尝试调用vChargeBack API来获取有关vCenter Server的信息。我有这个问题。PHP:调用REST api

我必须在请求体中将请求作为XML数据传递。而且我必须通过版本作为URL参数。我写的代码是

$xmlfile=simplexml_load_file('login.xml'); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$xmlfile);//Passing XML file as POST field 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_URL,"https://xx.xx.xx.xx/vCenter-CB/api/login");//Setting URL 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch , CURLOPT_SSL_VERIFYPEER , false);//Since I am requesting https 
curl_setopt($ch , CURLOPT_SSL_VERIFYHOST , false);//Since I am requesting https 
curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Accept: ' . $this->acceptType)); 
$response=curl_exec($ch);//Getting response 
$responseInfo=curl_getinfo($ch);//Getting response headers 

当我执行时,我有400个错误的请求响应。我注意到的是我没有发送URL作为URL参数。 它应该是 名称:版本 值:1.5.0 我不知道如何将此版本作为URL参数发送。我应该发送POSTFIELD那么我应该如何发送XML文件作为请求正文。

请帮我...

问候, Srinath

+0

他们不是给你举个例子吗? “URL参数”听起来像你应该做的'https://xx.xx.xx.xx/vCenter-CB/api/login?version = 1.5.0' –

+0

他们没有给出PHP的例子,但我有例子在java中,他们为PostMethod类创建了一个对象,并使用NameValuePair []参数设置版本= {New NameValuePair(“version”,“1.5.0”)}; post = new PostMethod(uri); post.setQueryString(parameters);'我也尝试过'https://xx.xx.xx.xx/vCenter-CB/api/login?version = 1.5.0',它仍然在说错误请求。 – Srinath

+0

这很有用。查询字符串是在?之后的部分。在一个url中,不是POST的主体。所以你在正确的轨道上,但我不知道你做错了什么,因为我不知道这个API是什么,也不会阅读它的文档。 –

回答

1

拒付接口不是REST风格。它是一个XML门户,在文档定义的给定端点处具有资源。要登录,请填写API_NAMESPACE作为为您的安装提供的XML名称空间,API_VERSION作为API版本号TYPE(可以是“本地”或“ldap”)。 NAMEPASSWORD应该是显而易见的。

<Request xmlns="$API_NAMESPACE/$API_VERSION"> 
    <Users> 
     <User> 
      <Type>$TYPE</Type> 
      <Name>$NAME</Name> 
      <Password>$PASSWORD</Password> 
     </User> 
    </Users> 
</Request> 

生成POST请求https://hostname/vCenter-CB/api/login?version=$API_VERSION与原料POST数据设定为上述XML。请记住,在请求返回后保留发送的会话cookie,因为它表示会话到服务器。

另外,如果您使用LDAP登录,则可能必须在Users(作为User元素的同级)下面包含LdapUsers子元素以提供LDAP凭据。这在VMware的API编程指南中进行了说明。