Подтвердить что ты не робот

Как отправить запрос PUT/DELETE в HTML?

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

Я, кстати, на PHP 5.2.6.

Спасибо.

4b9b3361

Ответ 1

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

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

Итак, в этом случае вы должны использовать простой набор операторов if-else, чтобы определить, переопределена ли переменная _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';
  }
}

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

Ответ 2

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

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

Update:

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

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

Ответ 3

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

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

Ответ 4

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