Итак, я могу использовать команды curl для получения информации о сайтах, которые у меня есть на netlify. Тем не менее, в соответствии с документами API, я должен быть в состоянии создать сайт, также используя POST. По жизни я не могу понять, что происходит. При запуске этого страница долго думает, затем обновляет и возвращает пустой ответ, и сайт не создается.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.netlify.com/api/v1/sites");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
$headers = array();
$headers[] = "User-Agent: AppName (accountEmail)";
$headers[] = "Content-Length: 1000";
$headers[] = "Authorization: Bearer MyAPIAuthKey";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
print $result;
Вот документация по Netlify API, специально ссылающаяся на раздел «Создание сайта» (3-й шаг) https://www.netlify.com/docs/api/#sites
Есть идеи, что мне здесь не хватает? Как я уже сказал, я авторизуюсь правильно и могу получить все данные, которые я хочу, из моей учетной записи. Я просто не могу что-то постить.
************************************************* ОБНОВЛЕНО *************************************************
Сейчас я передаю некоторые свойства, однако получаю тайм-аут запроса.
curl_setopt($ch, CURLOPT_URL, "https://api.netlify.com/api/v1/sites");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"name\":\"awb-test\"");
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
curl_setopt($ch, CURLOPT_POST, 1);
$headers = array();
$headers[] = "User-Agent: AWB (myemail@)";
$headers[] = "Content-Type: application/json";
$headers[] = "Content-Length: 1000";
$headers[] = "Authorization: Bearer MyAPIkey";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
Как сказал дурак в комментариях под ФП, проблема заключалась в жестко заданной длине контента. Чтобы исправить, я построил массив данных POST, json закодировал его и использовал длину строки, чтобы передать соответствующее значение.
$post_data = array(
'name' => '',
'force_ssl' => true,
'repo' => '',
);
$post_data = json_encode($post_data);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
Других решений пока нет …