如何使用Curl同时进行GET和POST?

时间:2015-11-30 00:50:18

标签: php api rest curl

我有一个工作" API"但是注意到它不是REST,因为我只是使用POST个请求传递mode变量来确定要执行的操作。现在,我正在更改与mode变量匹配的条件,以便它们匹配HTTP Method。但问题出现了。

在我通过POST提交的每个请求userHMAC data + user private key。因此,在我希望获得确定id的数据的情况下,我使用curl来创建包含这些变量的请求,并将其POST到URL api/id。然后有一个RewriteRule用于将其更改为api.php?id=$1,因此在我的api.php我有两个数据,id通过GET和通过POST的身份验证信息

所以...如果要获取用户的数据我现在需要使用GET方法,我该如何提交(POST)身份验证信息呢?

之前(工作但不是REST API应该如何工作)

api.php

if ($_SERVER["REQUEST_METHOD"] === "POST"){
    if ($_POST['mode'] === "get"){
        get_data($_GET["id"]);
    }
}

client.php

    $params = array('user' => 'qwerty', 'hash' => 'jFJKSAFhskafa');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://localhost/api/123";
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, count($params));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

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

应该如何:

api.php

if ($_SERVER["REQUEST_METHOD"] === "GET"){
    get_data($_GET["id"]);
}

client.php

    $params = array('user' => 'qwerty', 'hash' => 'jFJKSAFhskafa');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://localhost/api/123";
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  //-------->>>> How do I send the params now?

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

1 个答案:

答案 0 :(得分:0)

好的,有两种方法可以处理这种情况。

  • 不是通过POST提交身份验证信息,而是使用CURLOPT_HTTPHEADER'
  • 创建自定义标头
  • 欺骗cURL,提交POST数据,但将CURLOPT_CUSTOMREQUEST定义为GET