带有数据的PHP CURL PUT请求

时间:2015-09-11 00:50:55

标签: php curl httprequest

我需要发送一个PUT请求发送json数据,我编写了下面的代码,但数据没有发送。有人可以帮忙吗?

$url = 'https://example.com';
$data='{"example":"valor"}';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_PUT, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($curl);     
print_r($result);

感谢

4 个答案:

答案 0 :(得分:1)

我想我知道你的问题。尝试添加

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

PHP文档暗示如果你不这样做,执行curl会直接将内容输出到一个页面,如果你将它作为一个没有输出的脚本使用什么,显然不会显示任何东西。这应该使$result相等,然后允许您print_r

参考:http://php.net/manual/en/function.curl-setopt.php

答案 1 :(得分:0)

我建议您使用Guzzle。它是CURL的一个包装器,它抽象出所有配置,并为您提供了许多便于使用的便捷方法。

您可以按照以下链接中的说明安装Guzzle: http://guzzle.readthedocs.org/en/latest/overview.html#installation

下面是一个如何使用guzzle来获得你想要的东西的例子。

    require 'vendor/autoload.php';    
    use GuzzleHttp\Client;

    $url = 'https://example.com';
    $data= array("example" => "valor");

    $client = new Client();
    $response = $client->request('PUT', $url, [
        'json' => $data
    ]);

    print_r($response);

我在许多项目中使用Guzzle代替原始CURL,并发现它可以节省大量时间。

答案 2 :(得分:0)

PUT使用curl_setopt($ch, CURLOPT_PUT, true);

请参阅:How to start a GET/POST/PUT/DELETE request and judge request type in PHP?

答案 3 :(得分:0)

我遇到了同样的问题。我已经通过改变

解决了
curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");

之前,这个,curl尝试发布一个文件或类似的东西,100-continue,但我们需要发布json。