【问题标题】:Is it possible to use `--data-urlencode` and `--data-binary` options for the same curl command?是否可以为同一个 curl 命令使用 `--data-urlencode` 和 `--data-binary` 选项?
【发布时间】:2014-07-01 09:40:36
【问题描述】:
我正在使用curl,我想通过发送--data-urlencode 字符串和--data-binary JSON 文件内容来执行HTTP PUT 请求。是否可以在同一个curl 命令中实现这一点?
我尝试了以下
curl www.website.org --request PUT -H Content-Type: application/json --data-urlencode "key=sample_string" --data-binary @sample_file.json
但它似乎没有按预期工作:key=sample_string 和 sample_file.json 内容根本没有发送。
【问题讨论】:
标签:
http
curl
request
http-put
【解决方案1】:
这里有几件事;
- 您的 curl 请求缺少标头的双引号。应该是:
curl www.website.org --request PUT -H "Content-Type: application/json" \
--data-urlencode "key=sample_string" --data-binary @sample_file.json
- 您的内容类型是 application/json,我希望它不是“二进制”,因此您应该使用适当的类型。
无论如何,您应该能够使用如下简单的 php 脚本找到提交的值:
$putfp = fopen('php://input', 'r');
$putdata = '';
while($data = fread($putfp, 1024))
$putdata .= $data;
fclose($putfp);
var_dump($putdata);
echo "---CONTENT_TYPE---\n";
var_dump($_SERVER['CONTENT_TYPE']);