【发布时间】:2019-06-10 19:44:59
【问题描述】:
我正在尝试使用 PHP 7 从 VMware vCenter v6.5 获取 VM 信息。我从 curl_getinfo 收到错误代码 400。
我从这篇文章中复制了代码:VCenter ReST API authentication
我已经从命令行尝试过,并且能够获取会话 ID,所以我知道服务器正在按应有的方式发送信息,而不是发送到 PHP 网页。
以下命令参考:https://communities.vmware.com/thread/556377
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'vmware-use-header-authn: test' --header 'vmware-api-session-id: null' -u 'administrator@vsphere.local' 'https://vcenter.mydomain.local/rest/com/vmware/cis/session'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,'https://vcenter.mydomain.local/rest/com/vmware/cis/session');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_USERPWD, 'administrator@vsphere.local:Passw0rd');
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC );
$headers = array(
'Content-Type: application/json',
'Accept: application/json',
'vmware-use-header-authn: test',
'vmware-api-session-id: null',
'Expect:'
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$out = json_decode(curl_exec($ch));
if(!curl_exec($ch)){
die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}
$info = curl_getinfo($ch);
echo "<p>CURL URL: " . $info['url'];
echo "<p><font color=green>CURL Dump: <br>";
echo '<pre>';
var_dump($info);
echo "</pre>\n";
echo "<p>OUT:<br>";
var_dump($out);
if ($out === false) {
echo 'Curl Error: ' . curl_error($ch);
exit;
}
$sid = $out->value;
echo "<br>SID: " . $sid;
curl_close($ch);
?>
我希望 $out->value 的输出将是一个会话 ID,而不是我得到 NULL。感谢您的帮助,谢谢!
【问题讨论】:
-
你解决过这个问题吗?
-
@VladoPortos - 是的,我能够让它完美地工作。我相信这是由于我使用的标头有问题。
-
同样我得到它的工作......现在我正在尝试从 /mob 请求票证的问题 ...method=acquireTicket 它失败了“可能的 XSRF(跨站点请求伪造)检测到”,我无法通过 :(
标签: php rest curl vmware vcenter