Как отправить запрос PUT / DELETE в HTML? - PullRequest
13 голосов
/ 02 декабря 2009

Я возиться с REST в PHP и понимаю, что могу перехватить метод запроса vi a $_SERVER['REQUEST_METHOD']. Но как я могу инициировать PUT / DELETE запросы в PHP без использования cURL? Я хочу использовать возможности установки PHP по умолчанию, чтобы сделать это. Я не могу себе представить, что изменение атрибута метода тега формы для указания метода, отличного от GET или POST, будет работать во всех браузерах ... плюс стандарт HTML не распознает его.

Кстати, я на PHP 5.2.6.

Спасибо.

Ответы [ 4 ]

5 голосов
/ 03 декабря 2009

Обычно это делается скрытым полем формы и обрабатывается в приложении (в общем, не на веб-сервере).

<input type="hidden" name="_method" value="put" />

Так что в этом случае вы должны использовать простой набор-почти операторы, чтобы определить, переопределена ли переменная _method (конечно, правильно).Я бы использовал что-то вроде:

$method = 'get';
if($_SERVER['REQUEST_METHOD'] == 'POST') {
  if(isset($_POST['_method']
     && ($_POST['_method'] == 'PUT' || $_POST['_method'] == 'DELETE')) {
    $method = strtolower($_POST['_method']);
  } else {
    $method = 'post';
  }
}

Это был бы простой способ определить тип запроса для вашего приложения или фреймворка.

1 голос
/ 02 декабря 2009

fopen будет выполнять HTTP, но я верю, что он будет выполнять только запросы GET. Если вы используете fsockopen, вам придется самостоятельно обрабатывать протокол HTTP, генерировать заголовки и т. Д.

Вы можете использовать HTTPRequest (в расширении php_http) или PEAR .

Обновление:

Если вы действительно говорите о выполнении запросов PUT / DELETE к вашим PHP-скриптам, а не из их, этот вопрос может представлять интерес:

Доступны ли методы PUT, DELETE, HEAD и т. Д. В большинстве веб-браузеров?

0 голосов
/ 03 декабря 2009

Возможно, вы захотите взглянуть на WebDav ( PHP WebDav слайд-шоу ). Он построен для PUSH, DELETE, Etc ... Конечно, сервер, на который вы нацелены, должен принимать PUSH и DELETE, что означает, что Apache использует mod_webdav или что-то подобное В противном случае потребуется решение более низкого уровня (как указали другие)

0 голосов
/ 02 декабря 2009

Если вы хотите использовать встроенные функции PHP, но не cURL, вы в значительной степени застряли с fsockopen () и т. Д.,

или, в лучшем случае, библиотека, построенная вокруг этих функций, например Snoopy

...