Как запустить запрос GET / POST / PUT / DELETE и определить тип запроса в PHP? - PullRequest
15 голосов
/ 28 января 2010

Я никогда не вижу, как отправляется PUT/DELETE запрос.

Как это сделать в PHP?

Я знаю, как отправить запрос GET / POST с curl:

$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($ch, CURLOPT_COOKIEFILE,$cookieFile);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch,   CURLOPT_SSL_VERIFYPEER,   FALSE);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);

Но как сделать PUT / DELETE запрос?

Ответы [ 2 ]

47 голосов
/ 28 января 2010

Для DELETE используйте curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
Для PUT используйте curl_setopt($ch, CURLOPT_PUT, true);

Альтернативой, которая не зависит от устанавливаемого cURL, будет использование file_get_contents с настраиваемым контекстом потока HTTP .

$result = file_get_contents(
    'http://example.com/submit.php', 
    false, 
    stream_context_create(array(
        'http' => array(
            'method' => 'DELETE' 
        )
    ))
);

Ознакомьтесь с этими двумя статьями о выполнении REST с PHP

3 голосов
/ 28 января 2010

Вообще говоря, если вы хотите отправить не-GET запрос, вы часто будете работать с curl .


И вы будете использовать функцию curl_setopt для настройки отправляемого запроса; Среди большого количества возможных опций, чтобы изменить метод запроса, вас заинтересуют как минимум эти опции (цитирование) :

  • CURLOPT_CUSTOMREQUEST: пользовательский метод запроса, который следует использовать вместо "GET" или "HEAD" при выполнении HTTP-запроса. Это полезно для выполнения «DELETE» или других, более неясных HTTP-запросов.
  • CURLOPT_HTTPGET: TRUE для сброса метода HTTP-запроса на GET.
  • CURLOPT_POST: TRUE для выполнения обычного HTTP POST.
  • CURLOPT_PUT: TRUE в HTTP PUT файл. Для файла PUT должны быть установлены CURLOPT_INFILE и CURLOPT_INFILESIZE.


Конечно, curl_setopt - не единственная функция, которую вы будете использовать; см. страницу документации curl_exec для примера того, как отправить запрос с помощью curl.

(Да, этот пример довольно прост и отправляет запрос GET - но вы должны быть в состоянии построить оттуда ;-))

...