2011-07-21 44 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編程指南中進行了說明。