【问题标题】:PHP cURL as DELETE using POSTFIELDSPHP cURL 作为 DELETE 使用 POSTFIELDS
【发布时间】:2020-11-10 21:03:39
【问题描述】:

在我的情况下,用户已登录并想删除他的帐户。 然后他触发了一个 POST 表单,通过确认他的密码来重新验证该过程。

现在我想向 api/server 发送一个 cURL DELETE 并同时传递确认的密码。

我的做法是:

$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL => "https://www.myurl.com/v1/users",
    CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => json_encode(['cnfpwd' => $_POST['cnfpwd']]), //confirmed password
    CURLOPT_HTTPHEADER => array('X-API-KEY: '$apiKey),
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "DELETE",
));

$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);

//For testing purposes only
print_r($response);
print_r($data);

如果这种方法是正确的,我将如何在 API/服务器端获取 POSTFIELDS? 由于这是一个 DELETE 请求,$_GET、$_POST、$_REQUEST 为空。

编辑: 用于测试的api代码:

<?php
if($_SERVER['REQUEST_METHOD'] == "DELETE"){
   echo"POST: ";print_r($_POST);
}
?>

结果是:

POST: 数组 ( )

【问题讨论】:

  • 如果您执行 DELETE 请求,您将在 $_POST 中找到您的数据

标签: api rest php-curl http-delete


【解决方案1】:

您应该能够通过

获取请求的正文
$data = file_get_contents('php://input');

【讨论】:

  • 我正在删除账号,只是想通过确认的密码,比如:“你真的要删除你的账号吗,请重新输入你的密码”,所以DELETE是正确的在这种情况下。
  • @daniel 在这种情况下,是的,DELETE 是正确的动词
【解决方案2】:

我的最终解决方案是:

$parameters = file_get_contents("php://input");
$parameters = json_decode($parameters, true);

@Paolos 解决方案是正确的,我只需要添加第二行即可将参数作为数组访问。

【讨论】:

    猜你喜欢
    • 2012-05-02
    • 2012-11-05
    • 2018-03-11
    • 2011-03-28
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多