POST-запрос php со сложным json

Я пытаюсь создать экземпляр GCP, используя PHP. Для создания экземпляра мне нужно POST запрос с ниже json.

{
"machineType": "zones/us-central1-f/machineTypes/f1-micro",
"name": "testvm923",
"disks": [
{
"type": "",
"boot": true,
"initializeParams": {
"sourceImage": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1404-trusty-v20150909a"}
}
],
"networkInterfaces": [
{
"network": "global/networks/default",
"accessConfigs": [
{

}
]
}
]
}

Но я не уверен, как это сделать. Я попробовал ниже, но не сработало.

$body=utf8_encode('{ "machineType": "zones/us-central1-f/machineTypes/f1-micro", "name": "'.$vm_name.'", "disks": [{"type": "", "boot": true, "initializeParams": { "sourceImage": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1404-trusty-v20150909a" } } ], "networkInterfaces": [ { "network": "global/networks/default", "accessConfigs": [ { } ] } ] }');

$opts = json_decode($body);
// $opts = json_decode($body, true);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$opts);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data = curl_exec($ch);
if ($data === FALSE) {
die("Curl failed: " . curL_error($ch));
}
curl_close ($ch);

Я тоже пробовал как ниже но не получилось

$opts =  array (
"machineType" => "zones/us-central1-f/machineTypes/f1-micro",
"name" => "testvm923",
"disks" => array (
1 => array (
"type" => "",
"boot" => true,
"initializeParams" => array (
"sourceImage" => "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1404-trusty-v20150909a" )
)
),
"networkInterfaces" => array (
0 => array ( "network" => "global/networks/default" ,
"accessConfigs" => array (
0 => array()
)
)
)
);

Каждый раз, когда я получаю ошибку ниже:

Curl failed: malformed

Редактировать:

Вот полная функция. Но все равно получаю ошибку: Curl failed: malformed

function create_instance($project_id, $vm_name, $zone="us-central1-f") {
$api = "https://www.googleapis.com/compute/v1/projects/";
$url = $api."/".$project_id."/zones/".$zone."/instances?access_token=".$token;

$body=utf8_encode('{ "machineType": "zones/us-central1-f/machineTypes/f1-micro", "name": "'.$vm_name.'", "disks": [{"type": "", "boot": true, "initializeParams": { "sourceImage": "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1404-trusty-v20150909a" } } ], "networkInterfaces": [ { "network": "global/networks/default", "accessConfigs": [ { } ] } ] }');
$opts = $body;
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$opts);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data = curl_exec($ch);
if ($data === FALSE) {
die("Curl failed: " . curL_error($ch));
}
curl_close ($ch);
echo "$data";
}

Edit-2:

Получение ниже ошибки сейчас с сервера: Bad Request Error 400
Я чувствую, что Тип контента должен быть в приложении / JSON.

Любая помощь?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]