cURL与PHP通过PUT传递数据

问题描述 投票:2回答:2

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

我的正常命令看起来像这样:

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

我在SO上看到了这个thread

编辑:

使用Vitaly和Pedro Lobito评论我将我的代码更改为:

$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
2个回答
3
投票

你错误地传递了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字符串时


2
投票

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

$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);

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

© www.soinside.com 2019 - 2024. All rights reserved.