Подключение к vCenter REST API с помощью PHP - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь получить информацию о виртуальной машине из VMware vCenter v6.5 с PHP 7. Я получаю код ошибки 400 из curl_getinfo.

Я скопировал код для этого из этого поста: VCenter ReST API аутентификация

Я пробовал это из командной строки и смог получить идентификатор сеанса, поэтому я знаю, что сервер отправляет информацию обратно, как и должно, только не на веб-страницу 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'
<code><?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 "
\ п "; echo "

OUT:
"; var_dump ($ из); if ($ out === false) { echo 'Curl Error:'. curl_error ($ ч); выход; } $ sid = $ out-> value; echo "
SID:". $ С.и.д.; curl_close ($ ч); ?>

Я ожидаю, что вывод $out->value будет идентификатором сеанса, вместо этого я получу NULL. Спасибо за любую помощь, спасибо!

1 Ответ

0 голосов
/ 16 января 2019

я думаю, что VCenter блокирует запросы без заголовка user-agent, и curl-cli добавляет такой заголовок автоматически, а оболочки libcurl libcurl / php - нет. попробовать

curl_setopt($ch,CURLOPT_USERAGENT, 'php/' . PHP_VERSION . ' libcurl/' . (curl_version()['version']));

тогда вы получите что-то вроде

User-Agent: php/7.1.16 libcurl/7.59.0

что правдиво :) 1007 *

...