使用PHP调用CloudFlare但不使用Curl

问题描述:

如何在不使用CURL的情况下删除API调用cloudflare?使用PHP调用CloudFlare但不使用Curl

我的托管服务提供商不提供我很难为情服务


我特别感兴趣,并想使PHP API调用的CloudFlare从缓存中清除所有文件。

在API页面,我发现

enter image description here

然后做了研究,研究还研究并通过这样做

<?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我看到

enter image description here

可达但不工作,东西在这里很糟糕,甚至根本不可能。

那么它是否可以使这件事情没有CURL?如果是的话,该怎么做?

+0

有什么不对实际使用卷曲? – BenM

+0

@BenM我的托管服务不提供给我Curl –

+1

如何使用非垃圾提供程序呢?我可以想象没有SSH访问,但没有提供基本扩展之一? –

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支持,或者如果他们真的不能这样做,他们是一个低劣的虚拟主机,你应该找到一个新的。

+0

尝试从我的xampp的本地主机相同的脚本,同样的事情(错误) –