cloudflare api 将 curl 转换为 php curl 并发送 CNAME 更新

Posted

技术标签:

【中文标题】cloudflare api 将 curl 转换为 php curl 并发送 CNAME 更新【英文标题】:cloudflare api translate curl to php curl and send CNAME update 【发布时间】:2016-08-23 12:48:45 【问题描述】:

这是一个问题和答案,经过大量研究,使用了 *** 上其他回复中的一些信息。

如何将命令行 curl 转换为 php

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

上面的 curl 是来自 cloudflare 的 api 手册中关于如何添加 A 记录的示例。我需要添加许多 CNAMES 或子域。 Cloudflare 没有说明如何修改上述代码来创建 CNAMES。所以我会先解决这个问题:

$ curl -X POST "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records" \
-H "X-Auth-Email: user@example.com" \
-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: user@example.com',
                 '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”的需要。希望这会有所帮助。

【问题讨论】:

【参考方案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: user@example.com" \
-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: user@example.com';
$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);

【讨论】:

以上是关于cloudflare api 将 curl 转换为 php curl 并发送 CNAME 更新的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 PayPal 的 api 并需要帮助将 Curl 转换为 PHP

如何将此 cURL 代码转换为 PHP(PayPal API)

如何使用Curl将这个mailchimp API请求转换为使用PHP的Guzzle?

将 CURL 请求转换为 C# 以访问 Snipcart API 返回 401 Unauthorized

将 Curl 转换为 Zapier

将 curl 命令转换为 jQuery $.ajax()