使用PHP CURL发送带数据的PUT请求

3
我需要执行一个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);

谢谢


你遇到了什么错误? - undefined
我有同样的问题。请求已发送,但目标服务器没有收到其正文。你找到任何建议了吗? - undefined
@EvgeniyTimchenko 我不记得具体是什么解决了我的问题,但我设置了一些额外的选项,如(CURLOPT_COOKIEJAR,CURLOPT_COOKIEFILE,CURLOPT_COOKIESESSION,CURLOPT_SSL_VERIFYPEER,CURLOPT_AUTOREFERER,CURLOPT_USERAGENT,CURLOPT_POSTFIELDS和CURLOPT_HTTPHEADER)。 - undefined
4个回答

1
我想我知道你的问题所在。尝试添加以下内容:

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

的中文翻译是:

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

PHP文档暗示如果你不这样做,执行cURL将直接将内容输出到页面,如果你将其用作不输出任何内容的脚本,则显然不会显示任何内容。这应该使$result等于某些东西,并且允许你print_r它。
参考资料:http://php.net/manual/en/function.curl-setopt.php

@LucianoMarqueto 我看到你使用了 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);,但是为了排除故障的可能性,请尝试将你的 1 替换为 true。你是否遇到了任何页面错误? - undefined
@LucianoMarqueto 页面上显示了什么内容吗?有没有出现任何错误? - undefined

0

我遇到了同样的问题。我通过改变来解决了。

curl_setopt($curl, CURLOPT_URL, $url);

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

在之前,这个curl尝试使用100-continue来发送文件或类似的内容,但我们需要发送json数据。

0

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,并发现它是一个很好的时间节省工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接