Создание сайта на Netlify с использованием CURL в PHP

Итак, в настоящее время я могу использовать команды 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);

person Chris Porter    schedule 04.06.2018    source источник
comment
Вы не отправляете никаких данных с этим запросом. Из документов похоже, что необходимо предоставить строку JSON с перечисленными свойствами.   -  person cOle2    schedule 04.06.2018
comment
Состояние Документов POST /api/v1/sites создаст новый сайт, и вы сможете установить реквизиты. Я пытался просто заставить его работать, а затем расширить его. TBH Я совершенно новичок в использовании curl. Как мне создать реквизит и отправить его с помощью POST?   -  person Chris Porter    schedule 04.06.2018
comment
Если я добавлю curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"name\":\"awb-test\", \"force_ssl\": true}");, я получу другую ошибку. Я получаю, что клиент слишком долго выдает запрос.   -  person Chris Porter    schedule 04.06.2018
comment
Возможно, вам нужно отправить заголовок Content-Type: Content-Type:application/json   -  person cOle2    schedule 04.06.2018
comment
Я добавил тип контента. Я также установил CURLOPT_TIMEOUT на 10 000 секунд, но я все еще получаю сообщение "Вашему клиенту потребовалось слишком много времени для отправки запроса".   -  person Chris Porter    schedule 04.06.2018
comment
Этот вопрос был задан параллельно в службе поддержки, и кажется, что виновником было жесткое кодирование Content-Length, которое было неверным - Netlify ждал остальных, когда запрос был завершен с точки зрения php.   -  person fool    schedule 05.06.2018


Ответы (1)


Как заявил дурак в комментариях под ОП, проблема заключалась в жестко запрограммированной длине содержимого. Чтобы исправить это, я создал массив данных POST, закодировал его json и использовал длину строки для передачи соответствующего значения.

                    $post_data = array(
                        'name'      => '',
                        'force_ssl' => true,
                        'repo'      => '',
                    );
                    $post_data = json_encode($post_data);

                    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
person Chris Porter    schedule 05.06.2018
comment
Как раз то, что я искал, боролся с этим. Как насчет того, чтобы опубликовать весь рабочий код для всеобщего обозрения :) - person Woody; 28.09.2018