使用curl发出请求

时间:2014-12-18 10:22:43

标签: php rest curl put

在我成功发出POST请求并获取网络服务中的值之后我就建立了。我遇到了有关Put请求的问题。我设法制作了Put Request,我发送了一个包含name和id的数组,用于更新目的:

curl_setopt($ic, CURLOPT_POSTFIELDS, http_build_query($data));

但是当我尝试使用$_POST['id']获取发送的id时,我得到了未定义的索引错误,我print_r($ _ POST)并且它是空的。现在我不相信PUT的超级全局阵列就像POST一样,即使它存在,我也不认为有:

curl_setopt($ic, CURLOPT_PUTFIELDS, http_build_query($data));
你在卷曲中遇到过类似的错误吗?任何的想法?

要查看我之前关于帖子请求的帖子,以便更好地了解我尝试做的事情,here

4 个答案:

答案 0 :(得分:3)

试试这个

curl_setopt($ic, CURLOPT_PUTFIELDS, json_encode($data));

并通过

获取
$array_get = json_decode(file_get_contents('php://input'));

答案 1 :(得分:2)

$_POST的{​​{1}};

您使用method=post,因此method=put为空。

你可以得到这样的putdata:

$_POST

答案 2 :(得分:2)

使用 CURLOPT_CUSTOMREQUEST = PUT ,然后只需使用 CURLOPT_POSTFIELDS

设置值

或  您可以使用自定义标题 CURLOPT_HTTPHEADER 例如

curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-HTTP-Method-Override: PUT'));

下面的脚本演示了如何发出PUT请求。

$ch = curl_init();    

curl_setopt($ch, CURLOPT_URL, "url");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // note the PUT here

curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HEADER, true);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string)                                                                       
));       

// execute the request

$output = curl_exec($ch);

// close curl resource to free up system resources

curl_close($ch);

答案 3 :(得分:0)

这是发送PUT请求的秘诀:

curl_setopt($ch, CURLOPT_POST, true);  // <-- NOTE this is POST
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // <-- NOTE this is PUT

完整示例:

$vals = array("email" => "hi@example.com", "phone" => "12345");
$jsonData = json_encode($vals);

curl_setopt($ch, CURLOPT_POST, true);  // <-- NOTE this
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // <-- NOTE this

//We want the result / output returned.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type:application/json',
    'Content-Length:' . strlen($jsonData),
    'X-Apikey:Any_other_header_value_goes_here'
));

//Our fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);

//Execute the request.
$response = curl_exec($ch);

echo $response;