【问题标题】:cURL with PHP passing data with PUTcURL 与 PHP 使用 PUT 传递数据
【发布时间】:2017-05-04 15:06:42
【问题描述】:

我想使用 PUT 方法通过 PHP 卷曲到远程服务器。并流式传输到文件。

我的正常命令如下所示:

curl http://192.168.56.180:87/app -d "data=start" -X PUT 

我在 SO 上看到了这个 thread

编辑:

使用 Vitaly 和 Pedro Lobito cmets 我将代码更改为:

$out_file = "logging.log";
$fp = fopen($out_file, "w");

$ch = curl_init();
$urlserver='http://192.168.56.180:87/app';
$data = array('data=start');
$ch = curl_init($urlserver);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));

curl_exec($ch);
curl_close($ch);
fclose($fp);

但还是不行。

当我使用 curl 得到这个响应时:

 192.168.56.154 - - [04/May/2017 17:14:55] "PUT /app HTTP/1.1" 200 -

我使用上面的 php 得到了这个响应:

 192.168.56.154 - - [04/May/2017 17:07:55] "PUT /app HTTP/1.1" 400 -

【问题讨论】:

标签: php curl put


【解决方案1】:

您错误地传递了 POST 字符串

$data = array('data=start');
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));

在这种情况下,您已经构建了字符串,所以只需包含它

$data = 'data=start';
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

http_build_query 仅当您有 key => value 数组并需要将其转换为 POST 字符串时

【讨论】:

  • 完成了这项工作。谢谢。我搞砸了“数组('data = start')”;我虽然必须指定类型(在其他 SO 线程之后),但我想我错了! .很高兴知道!
【解决方案2】:

为什么不将 curl 输出直接保存到文件中?即:

$out_file = "/path/to/file";
$fp = fopen($out_file, "w");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fclose($fp);
curl_close($ch);

注意:
当您询问有关错误的问题时,请务必附上错误日志。要启用错误报告,请在 php 脚本的顶部添加 error_reporting(E_ALL); ini_set('display_errors', 1);

【讨论】:

  • 我在目标 Web 服务器上收到了“192.168.56.154 - - [04/May/2017 16:52:56] “PUT / HTTP/1.1” 404 -”。我猜这个问题来自我发送的命令。
  • 您确定不想使用curl_setopt($ch, CURLOPT_POST, 1); 而不是curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
  • 我编辑了我的初始帖子。我确认,我不使用: curl_setopt($ch, CURLOPT_POST, 1);有什么线索吗?
猜你喜欢
  • 2014-02-11
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多