2017-02-10 8 views
0

Вот мой код пытается удалить файл файл через апиИспользование Cloudflare API для удаления файлов из кэша не работает

$ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, "https://api.cloudflare.com/client/v4/zones/<MY-ZONE-ID>/purge_cache"); 
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     $headers = [ 
      'X-Auth-Email: MYEMAIL', 
      'X-Auth-Key: MY-AUTH-KEY', 
      'Content-Type: application/json' 
     ]; 

     $data = json_encode(array("files" => "https://example.com/file/".$filename)); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
     $result = curl_exec($ch); 

Ответ я получаю выглядит следующим образом

{ 
    "success":false, 
    "errors":[ 
     { 
     "code":1012, 
     "message":"Request must contain one of \"purge_everything\" or \"files\", or \"tags" 
     } 
    ], 
    "messages":[ 

    ], 
    "result":null 
} 

Документация говорит, что тег не является обязательным, поэтому он должен работать

curl -X DELETE "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/purge_cache" \ 
    -H "X-Auth-Email: [email protected]" \ 
    -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \ 
    -H "Content-Type: application/json" \ 
    --data '{"files":["http://www.example.com/css/styles.css"],"tags":["some-tag","another-tag"]}' 

Что здесь делать неправильно?

ответ

1

Возможно, это связано с тем, что ваше имущество files не является массивом.

Попробуйте

$data = json_encode(array("files" => array("https://example.com/file/".$filename))); 
+0

Пробовал, что не сработал ... такая же ошибка – user2650277

+0

Можете ли вы удалить «http_build_query» и проверить еще раз? – remy

+0

удаление 'http_build_query' и' curl_setopt ($ ch, CURLOPT_POST, true); 'исправлено его – user2650277

1

Это немного сбивает с толку. Почтовые данные обычно отправляются в парах значений ключа.
Кроме того, когда сообщение данных является завиток массива изменяет тип контента в multipart/form-data

Когда запись данных посылается в виде строки запроса, это в формате key1=value1&key2=value2

Похоже JSON это значение с не ключ.

Я бы попробовал его как массив и строку, так и посмотреть заголовок запроса.
В заголовке запроса посмотрите тип содержимого и данные.

Чтобы получить заголовок запроса в завиток возвращения добавить эту опцию:
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

Вы можете добавить:
curl_setopt($ch, CURLOPT_POST, true);

$data[] = json_encode(array('files'=>"https://example.com/file/$filename")); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$data); 

$data = json_encode(array('files'=>"https://example.com/file/$filename")); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$data); 

PS: Вам не нужно использовать. конкатенация при использовании двойных котировок для $filename

Смежные вопросы