Cloudflare API переводит curl в php curl и отправляет обновление CNAME

Это вопрос и ответ после долгих исследований с использованием некоторой информации из других ответов, найденных в stackoverflow.

Как преобразовать завиток командной строки в php:

$ curl -X POST "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
-H "Content-Type: application/json" \
--data '{"type":"A","name":"example.com","content":"127.0.0.1","ttl":120}'

Приведенный выше curl — это пример из руководства по API Cloudflare о том, как добавить запись A. Мне нужно было добавить множество CNAMES или поддоменов. Cloudflare не объясняет, как изменить приведенный выше код для создания CNAMES. Итак, сначала я уберу это:

$ curl -X POST "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
-H "Content-Type: application/json" \
--data '{"type":"CNAME","name":"subdomain.example.com","content":"example.com","ttl":120}'

Сначала я изменил поле «тип» на «CNAME». Следующее поле «имя» — это место, куда вы помещаете субдомен/CNAME или, в моем случае, результирующую переменную из foreach. Наконец, в поле «контент» вы указываете домен, на который указывает ваш новый CNAME.

Как это выглядит в php:

$ch = curl_init();
$headers = array(
                 'X-Auth-Email: [email protected]',
                 'X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41',
                 'Content-Type: application/json',
                  );
$data = array(
              'type' => 'CNAME',
              'name' => 'subdomain.example.com',
              'content' => 'example.com',
              'ttl' => '120',
               );
$json = json_encode($data);
curl_setopt($ch, CURLOPT_URL, "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records");
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_exec($ch);
curl_close($ch);

Другие ответы не учитывали необходимость «json_encode». Надеюсь это поможет.


person Lee Hansen    schedule 28.04.2016    source источник


Ответы (1)


Чтобы преобразовать действительные команды curl в действительный код PHP, я рекомендую этот очень полезный онлайн-конвертер: https://incarnate.github.io/curl-to-php/

Используя его, ваша исходная командная строка:

curl -X POST "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
-H "Content-Type: application/json" \
--data '{"type":"A","name":"example.com","content":"127.0.0.1","ttl":120}'

Будет автоматически преобразовано в:

curl_setopt($ch, CURLOPT_URL, 'https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"type\":\"A\",\"name\":\"example.com\",\"content\":\"127.0.0.1\",\"ttl\":120}");

$headers = array();
$headers[] = 'X-Auth-Email: [email protected]';
$headers[] = 'X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41';
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
person jfoliveira    schedule 18.03.2020