繁体   English   中英

使用PHP但不使用Curl的Api调用CloudFlare

[英]Api call to CloudFlare with PHP but without Curl

如何在PHP中在没有CURL的情况下对Cloudflare进行delete api调用?

我的托管服务提供商不向我提供卷曲服务


我特别感兴趣,想对CloudFlare进行php API调用,以清除缓存中的所有文件。

在api页面上,我发现

在此处输入图片说明

然后研究和研究仍在研究中,并找到了一种可能的方法

<?php
$data = array (
    "purge_everything"  =>  true
);
$url = "https://api.cloudflare.com/client/v4/zones/MYZONEID/purge_cache";
$opts = array('http' =>
                  array(
                      'method'  => 'DELETE',
                      'header'  => "Content-Type: application/json\r\n" . "X-Auth-Key: MYKEY\r\n" . "X-Auth-Email: MYEMAIL\r\n",
                      'data' => json_encode($data)
                  )
);
$context  = stream_context_create($opts);
$fp = @fopen($url, 'rb', false, $context);
if (!$fp) {
    throw new Exception("Problem with $url, $php_errormsg");
}
$response = @stream_get_contents($fp);
if ($response === false) {
    throw new Exception("Problem reading data from $url, $php_errormsg");
}
return $response;

但是有错误

Fatal error: Uncaught Exception: Problem with https://api.cloudflare.com/client/v4/zones/MYZONEID/purge_cache, in /srv/disk11/2444530/www/xxxx.pl/test.php:16 Stack trace: #0 {main} thrown in /srv/disk11/2444530/www/xxxx.pl/test.php on line 16

我也这样尝试过:

<?php
$data = array (
    "purge_everything"  =>  true
);
$method = "getCallDetails";
$url = "https://api.cloudflare.com/client/v4/zones/MYZONEID/purge_cache";
$opts = array('http' =>
                  array(
                      'method'  => 'DELETE',
                      'header'  => "Content-Type: application/json\r\n" . "X-Auth-Key: MyKEY\r\n" . "X-Auth-Email: myEMAIL\r\n",
                      'data' => json_encode($data)
                  )
);
$context  = stream_context_create($opts);
$result = file_get_contents($url, false, $context);

return $result;

但这一次还不错,但错误:

Warning: file_get_contents(https://api.cloudflare.com/client/v4/zones/MYAPIID/purge_cache): failed to open stream: Network is unreachable in /srv/disk11/2444530/www/xxxx.pl/test.php on line 15

当我在浏览器上访问https://api.cloudflare.com/client/v4/zones/MYAPIID/purge_cache我看到

在此处输入图片说明

可以到达但不起作用,这里有些不好,甚至根本不可能。

那么有可能在没有CURL的情况下制作此东西吗? 如果是的话,该怎么做?

PHP HTTP包装器不是Curl,因此您需要将--data从Curl命令行开关转换为PHP中适当的HTTP上下文选项。

PHP中的条目是“ content ”。 使用它而不是“ data ”应该做到这一点。

例:

$authKey = "MyKEY";
$authEmail = "myEMAIL";

$zoneId = "MYZONEID";
$endpoint = "purge_cache";

$data = [
    "purge_everything" => true
];

$url = "https://api.cloudflare.com/client/v4/zones/{$zoneId}/{$endpoint}";
$opts = ['http' => [
    'method' => 'DELETE',
    'header' => [
        "Content-Type: application/json",
        "X-Auth-Key: {$authKey}",
        "X-Auth-Email: {$authEmail}",
    ],
    'content' => json_encode($data),
]];
$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);

# [...] parse response

另请参阅:

似乎某些防火墙阻止了file_get_contents连接到外部网络。 您上一个带有file_get_contents的代码应该可以正常工作。 请与您的webhost客户支持联系,并请他们解除阻止您的php脚本访问网络的权限。 哦,让他们添加curl支持,或者如果他们真的不能做到这一点,那么他们是一个肮脏的虚拟主机,您应该找到一个新的虚拟主机。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM