这是我的代码。在这种情况下,它不会使用帖子值($con
)来输入$cmd
中的文字
<?php
if(isset($_POST['conversation']))
{
$con=$_POST['conversation'];
echo $con;
$cmd='curl -X POST -u "username":"password" -H "Content-Type:application/json" -d "{\"input\": {\"text\":\"$con\"]}}""https://gateway.watsonplatform.net/conversation/api/v1/workspaces/a9379972-d820-4cdf-b1cb-ad0af898a534/message?version=2016-07-11"';
exec($cmd,$result);
//$response = json_decode($result);
print_r($result);
}
?>
答案 0 :(得分:4)
只需使用PHP built-in curl commands:
<?php
if(isset($_POST['conversation'])) {
$data = array("input"=>array("text"=>$_POST["conversation"]));
$url = "https://gateway.watsonplatform.net/conversation/api/v1/workspaces/a9379972-d820-4cdf-b1cb-ad0af898a534/message?version=2016-07-11";
$ch = curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_USERPWD => "username:password",
CURLOPT_HTTPHEADER => array("Content-Type:application/json"),
CURLOPT_POSTFIELDS => json_encode($data),
));
$response = curl_exec($ch);
curl_close($ch);
print_r(json_decode($response));
}
?>
答案 1 :(得分:1)
您正在获取原始POST
值并将其作为命令行参数传递。这是一个糟糕的主意。它为您提供远程执行攻击。有人可以轻松发布“; sudo rm -rf /”的会话值。坏消息。不转义输入几乎肯定会破坏您尝试发送的JSON哈希值。
接下来,您在POST数据和网址之间缺少空格,因此curl甚至看不到网址。
如果您需要执行curl的命令行版本,请对您的值使用escapeshellarg。
理想情况下,使用PHP curl库。 http://php.net/manual/en/book.curl.php
然后,您可以以编程方式使用curl,而不必担心产生curl
进程或如何转义args。
答案 2 :(得分:1)
请注意使用'和'。您已将$con
括在单引号中,因此无法解析:
$bob = 'hello';
$a = '$bob';
$b = "$bob";
$a : $bob
$b : hello