2011-07-21 20 views
0

vCenterサーバーに関する情報を取得するためにvChargeBack APIを呼び出そうとしています。私はこれに問題があります。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 Bad Requestレスポンスを持っています。私が気づいたのは、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 [] parameters = {new NameValuePair(" version "、" 1.5.0 ")}を使ってバージョンを設定しました。 post =新しいPostMethod(uri); post.setQueryString(parameters); '' https://xx.xx.xx.xx/vCenter-CB/api/login?version = 1.5.0'も試しましたが、それでもやはりBad Requestを言っています。 – Srinath

+0

それは便利です。クエリ文字列は、?の後ろにある部分です。 POSTの本体ではなく、URL内にあります。あなたは正しい方向に進んでいますが、何が間違っているのか分かりません。私はこのAPIが何であるか分かりませんし、ドキュメントも読んでいません。 –

答えて

1

チャージバックインターフェースはRESTfulなではありません。ドキュメントで定義されたエンドポイントにリソースを持つXMLポータルです。ログインするには、インストールに提供されているXML名前空間としてAPI_NAMESPACEを入力してください。は、APIバージョン番号TYPE(「ローカル」または「LDAP」でもかまいません)です。 NAMEおよびPASSWORDは明らかです。

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

上記XMLに生のPOSTデータセットとhttps://hostname/vCenter-CB/api/login?version=$API_VERSIONにPOST要求を生成します。このリクエストが返された後に送信されるセッションCookieは、サーバーへのセッションを表すため、保持しておいてください。あなたはLDAPログインを使用している場合

また、あなたは、LDAPの資格情報を提供するために、(User要素の兄弟として)Users以下LdapUsers子要素を含める必要があります。これは、VMwareのAPIプログラミングガイドに記載されています。