使用PHP调用CloudFlare但不使用Curl
如何在不使用CURL的情况下删除API调用cloudflare?使用PHP调用CloudFlare但不使用Curl
我的托管服务提供商不提供我很难为情服务
我特别感兴趣,并想使PHP API调用的CloudFlare从缓存中清除所有文件。
在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,应该已经工作。联系您的虚拟主机客户支持,并要求他们解除您的PHP脚本访问网络。哦,并让他们添加curl支持,或者如果他们真的不能这样做,他们是一个低劣的虚拟主机,你应该找到一个新的。
尝试从我的xampp的本地主机相同的脚本,同样的事情(错误) –
有什么不对实际使用卷曲? – BenM
@BenM我的托管服务不提供给我Curl –
如何使用非垃圾提供程序呢?我可以想象没有SSH访问,但没有提供基本扩展之一? –