如何以HTML格式发送PUT / DELETE请求?

时间:2009-12-02 20:50:17

标签: rest

我正在乱搞PHP中的REST,我知道我可以捕获请求方法vi $_SERVER['REQUEST_METHOD']。但是如何在不使用cURL的情况下在PHP中触发PUT / DELETE请求? 我想使用默认PHP安装的功能来执行此操作。 我无法想象更改form标签的method属性以指定除GET或POST之外的方法可以在所有浏览器上运行...加上HTML标准无法识别它。

顺便说一下,我使用的是PHP 5.2.6。

感谢。

4 个答案:

答案 0 :(得分:5)

通常这是由隐藏的表单字段完成的,并在应用程序中处理(而不是网络服务器)。

<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';
  }
}

这是确定应用程序或框架的请求类型的简单方法。

答案 1 :(得分:1)

fopen将执行HTTP,但我相信它只会执行GET请求。如果您使用fsockopen,则需要自己处理HTTP协议,生成标题等。

您可以使用HTTPRequestphp_http扩展名)或PEAR

更新

如果你真的在谈论将发送到你的PHP脚本,而不是来自,那么这个问题可能会引起关注:

Are the PUT, DELETE, HEAD, etc methods available in most web browsers?

答案 2 :(得分:0)

如果你想使用PHP的内置函数,而不是cURL,那么你很容易使用fsockopen()等等,

或充其量是围绕这些功能构建的库,例如Snoopy

答案 3 :(得分:0)

您可能需要查看WebDav(PHP WebDav slide show)。它是为PUSH,DELETE,Etc而构建的......当然,你所针对的服务器需要接受PUSH和DELETE,这意味着Apache正在使用mod_webdav或类似的东西。否则,将需要更低级别的解决方案(正如其他人指出的那样)